• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Conhecendo a JSR 223: Scripting for the Java Platform
 

Conhecendo a JSR 223: Scripting for the Java Platform

on

  • 5,933 views

Palestra ministrada no evento "Café com Tapioca" realizado no dia 23 de janeiro de 2008 pelo CEJUG (Ceará Java User Group)

Palestra ministrada no evento "Café com Tapioca" realizado no dia 23 de janeiro de 2008 pelo CEJUG (Ceará Java User Group)

Statistics

Views

Total Views
5,933
Views on SlideShare
5,647
Embed Views
286

Actions

Likes
3
Downloads
38
Comments
0

6 Embeds 286

http://www.milfont.org 130
http://dinamicas.emvideos.com.br 74
http://dinamicas.emvideos.com.br 74
http://www.slideshare.net 5
http://www.linkedin.com 2
http://www.netvibes.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Conhecendo a JSR 223: Scripting for the Java Platform Conhecendo a JSR 223: Scripting for the Java Platform Presentation Transcript

    • Conhecendo a JSR 223: Scripting for the Java Platform Chri i stano M if lont ht p:/ w w . if . g t /w m lontor
    • Roadmap 1 – Porque outras linguagens? 2 – JVM vs CLR 3 – Outras linguagens na JVM 4 – Padronizando com a JSR 223 5 – Desvantagens com scripting
    • Porque outras linguagens? Funcional vs Orientado a objetos Prototype-based Vs Class-based Declarativo Vs Imperativo Tipos dinâmicos Vs Estáticos Tipos fracos vs Tipos Fortes
    • Porque outras linguagens? Pattern Quine Matching Lambda calculus Continuation List Closure comprehension Tail Call CurryingThunk backtracing High-order functions
    • Porque outras linguagens? var consulta = reduce(+, map(*,array,k)); Rotinas funcionais não explicitam a ordem de execução e tem liberdade de executar todas ao mesmo tempo em paralelo
    • Porque outras linguagens? DSL – Domain Specific Language SGBD controla armazenamento, transação, concorrência, busca... o programador simplesmente escreve SELECT * FROM TABLE Macro - Excel ABAP - SAP LINQ - C# 3 ... Todo desenvolvedor que trabalha com web conhece mais de uma linguagem: XML, HTML,CSS
    • Porque outras linguagens? Linguagem correta para problema using System; using System.IO; public class RemoveArquivosVelhos { Usando C# public static void Main(string[] args) { foreach (FileInfo fi in (new DirectoryInfo (@“tempbackup”)).GetFiles()) { if (((TimeSpan) (DateTime.Now - fi.LastWriteTime)).Days > 7) { fi.Delete(); } } } } Usando Bash find /usr -atime +6 -exec rm -f quot;{}quot; quot;;quot;
    • Porque outras linguagens? Sem reinventar a roda def thumbnail(temp, target) system(quot;/usr/local/bin/convert #{escape(temp)} -resize 48x48! #{escape(target)}quot;) end Trapaceando com Ruby
    • Porque outras linguagens? DEPLOY [Cliente no gtalk: Gostaria de inserir uma regrinha, demora muito? [cmilfont]: Nada, aguarda aí que é rapi10, so o tempo do deploy [Cliente no gtalk]: O.o
    • Porque outras linguagens? Tendência SimpleDB, Amazon.com's document- based database written in Erlang Google uses Python for backends of web apps such as Gmail and GMaps Youtube uses Python quot;to produce maintainable features in record times, with a minimum of developersquot; Fonte: http://en.wikipedia.org
    • Porque outras linguagens? Dois caminhos Transformar Java em multiparadigma ou Usar uma linguagem apropriada
    • Porque outras linguagens? Java com Closure Voce quer isso? <R, T extends java.io.Closeable, throws E> R with(T t, {T=>R throws E} block) throws E { try { return block.invoke(t); } finally { try { t.close(); } catch (IOException ex) {} } } ...ou melhorar o suporte da JVM às outras linguagens?
    • JVM vs CLR Microsoft tinha a melhor IDE e a melhor JVM... ... Criou sua própria marca aproveitando o “Know how”... ... Suporte a várias linguagens desde o início... ... Forçou o Java correr atrás, varargs, generics, anotações... ... ainda está alguns passos na frente!
    • JVM vs CLR A JVM aproveita o maior marketshare... ... Já tem mais linguagens do que a CLR ... ... Hoje tem performance superior e considerada a melhor VM... ... JSR 292 - Supporting Dynamically Typed Languages ... ... JSR 223: Scripting for the Java Platform!
    • Outras linguagens na JVM JRuby, Jython, Groovy, BeanShell, Pnuts, Jacl (TCL), JudoScript, Rhino, Jaskell, Sleep (Perl), Jelly, AWK, JEP, Jexl, JST, SISC (Scheme), Athena (Smaltalk), Jepp (Python native), Quercus (PHP), BexScript, Jasconn (AppleScript), JavaFX...
    • Outras linguagens na JVM List comprehensions Jaskell getEvenNumbers aList = [ x | x >- aList, x `mod` 2 = 0] Jython def getEvenNumbers(l): return [x for x in l if x % 2 == 0] def getEvenNumbers(l : List[int]) = Scala for {i val2i <- l 0 } % == yield i
    • Outras linguagens na JVM Linguagem construída sobre uma outra linguagem de Scripting Java - Network, IO, JNI... Pnuts - Scripting Jasp (Java Based Statistical Processor) http://jasp.ism.ac.jp/overview-e.html
    • Padronizando com a JSR 223 Bean Scripting Framework Projeto de pesquisa de Sanjiva Weerawarana no T.J. Watson Research Center da IBM em 1999 Em 1999 a IBM doou ou Apache Cada linguagem tinha sua própria forma de interagir com a JVM criando dependência
    • Padronizando com a JSR 223 Bean Scripting Framework BSF criou uma camada única de interação entre o Java e as outras linguagens Proliferação de abordagens semelhantes? Hora de padronizar!
    • Padronizando com a JSR 223 JSR 223 Scripting for the java Plataform API padronizada que fornece uma interface comum a todas as linguagens de scripting API incluída no Mustang (Java 6) Implementação no Mustang com Rhino (javascript)
    • Padronizando com a JSR 223 API simples javax.script.AbstractScriptingEngine javax.script.Bindings javax.script.Compilable javax.script.CompiledScript javax.script.Invocable javax.script.ScriptContext javax.script.ScriptEngine; javax.script.ScriptEngineFactory javax.script.ScriptEngineManager; javax.script.ScriptException; javax.script.SimpleBindings javax.script.SimpleScriptContext
    • Padronizando com a JSR 223 Descobrindo e instanciando um mecanismo de engine ScriptEngineManager factory = new ScriptEngineManager(); ScriptEngine engine = factory.getEngineByName(quot;JavaScriptquot;);
    • Padronizando com a JSR 223 Construindo e executando o script String [] script = { quot;var a = 2;quot;, quot;var b = 3;quot;, quot;var c = a + b;quot;, quot;print(quot;a + b = quot; + c);quot; }; engine.eval(script));
    • Padronizando com a JSR 223 Executando um script em arquivo String path = NotaFiscal.class.getResource(quot;script.jsquot;) .getPath(); engine.eval(new FileReader(path));
    • Padronizando com a JSR 223 Trocando variáveis entre o java e o script no mesmo contexto engine.put(quot;totalquot;, this.total); String path = getArquivo(); engine.eval(new FileReader(path)); this.total = (Double) engine.get(quot;totalquot;);
    • Padronizando com a JSR 223 Compilando o script ScriptEngine e = ... CompiledScript cs = ((Compilable) e) .compile(statement); cs.eval();
    • Desvantagens com scripting Sintaxes extranhas Performance Debug Mais pontos de manutenção Pouco pessoal qualificado Aprender muitos paradigmas * * Deveria ser vantagem mas é o terror dos Code Monkeys
    • Fim! Mais em: http://www.milfont.org