Conhecendo a
   JSR 223:
Scripting for the
 Java Platform

    Chri i
        stano M if
                 lont
  ht p:/ w ...
Roadmap
1 – Porque outras linguagens?
2 – JVM vs CLR
3 – Outras linguagens na JVM
4 – Padronizando com a JSR 223
5 – Desva...
Porque outras linguagens?

 Funcional vs Orientado a objetos
 Prototype-based Vs Class-based
    Declarativo Vs Imperativo...
Porque outras linguagens?
                     Pattern
    Quine           Matching
                               Lambda
...
Porque outras linguagens?
var consulta = reduce(+, map(*,array,k));

  Rotinas funcionais não explicitam a
  ordem de exec...
Porque outras linguagens?
  DSL – Domain Specific Language
     SGBD controla armazenamento,
   transação, concorrência, b...
Porque outras linguagens?
Linguagem correta para problema
 using System;
 using System.IO;
 public class RemoveArquivosVel...
Porque outras linguagens?
       Sem reinventar a roda
def thumbnail(temp, target)
  system(quot;/usr/local/bin/convert #{...
Porque outras linguagens?
              DEPLOY
[Cliente no gtalk: Gostaria de inserir
    uma regrinha, demora muito?
   [...
Porque outras linguagens?
               Tendência
  SimpleDB, Amazon.com's document-
    based database written in Erlang...
Porque outras linguagens?
         Dois caminhos

Transformar Java em multiparadigma
               ou
  Usar uma linguage...
Porque outras linguagens?
              Java com Closure
Voce quer isso?
     <R, T extends java.io.Closeable, throws E>
 ...
JVM vs CLR
Microsoft tinha a melhor IDE e a melhor
JVM...
  ... Criou sua própria marca
  aproveitando o “Know how”...
   ...
JVM vs CLR
A JVM aproveita o maior marketshare...
  ... Já tem mais linguagens do
  que a CLR ...
     ... Hoje tem perfor...
Outras linguagens na JVM

JRuby, Jython, Groovy, BeanShell,
Pnuts, Jacl (TCL), JudoScript, Rhino,
Jaskell, Sleep (Perl), J...
Outras linguagens na JVM
                 List comprehensions



        Jaskell      getEvenNumbers aList =
             ...
Outras linguagens na JVM
Linguagem construída sobre uma
   outra linguagem de Scripting
      Java - Network, IO, JNI...

...
Padronizando com a JSR 223
 Bean Scripting Framework
Projeto de pesquisa de Sanjiva
Weerawarana no T.J. Watson
Research Ce...
Padronizando com a JSR 223
 Bean Scripting Framework
BSF criou uma camada única de
  interação entre o Java e as
       ou...
Padronizando com a JSR 223
            JSR 223
Scripting for the java Plataform
 API padronizada que fornece
uma interface...
Padronizando com a JSR 223
          API simples
   javax.script.AbstractScriptingEngine
   javax.script.Bindings
   javax...
Padronizando com a JSR 223
    Descobrindo e instanciando
     um mecanismo de engine
ScriptEngineManager factory =
      ...
Padronizando com a JSR 223
Construindo e executando o script
   String [] script = {
      quot;var a = 2;quot;,
      quo...
Padronizando com a JSR 223
Executando um script em arquivo
String path =
NotaFiscal.class.getResource(quot;script.jsquot;)...
Padronizando com a JSR 223
Trocando variáveis entre o java e
   o script no mesmo contexto

engine.put(quot;totalquot;, th...
Padronizando com a JSR 223
      Compilando o script

ScriptEngine e = ...
CompiledScript cs = ((Compilable) e)
    .compi...
Desvantagens com scripting

    Sintaxes extranhas
    Performance
    Debug
    Mais pontos de manutenção
    Pouco pesso...
Fim!
       Mais em:
http://www.milfont.org
Upcoming SlideShare
Loading in …5
×

Conhecendo a JSR 223: Scripting for the Java Platform

4,430
-1

Published on

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

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,430
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
39
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Conhecendo a JSR 223: Scripting for the Java Platform

  1. 1. 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
  2. 2. Roadmap 1 – Porque outras linguagens? 2 – JVM vs CLR 3 – Outras linguagens na JVM 4 – Padronizando com a JSR 223 5 – Desvantagens com scripting
  3. 3. 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
  4. 4. Porque outras linguagens? Pattern Quine Matching Lambda calculus Continuation List Closure comprehension Tail Call CurryingThunk backtracing High-order functions
  5. 5. 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
  6. 6. 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
  7. 7. 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;
  8. 8. 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
  9. 9. 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
  10. 10. 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
  11. 11. Porque outras linguagens? Dois caminhos Transformar Java em multiparadigma ou Usar uma linguagem apropriada
  12. 12. 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?
  13. 13. 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!
  14. 14. 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!
  15. 15. 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...
  16. 16. 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
  17. 17. 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
  18. 18. 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
  19. 19. 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!
  20. 20. 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)
  21. 21. 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
  22. 22. Padronizando com a JSR 223 Descobrindo e instanciando um mecanismo de engine ScriptEngineManager factory = new ScriptEngineManager(); ScriptEngine engine = factory.getEngineByName(quot;JavaScriptquot;);
  23. 23. 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));
  24. 24. Padronizando com a JSR 223 Executando um script em arquivo String path = NotaFiscal.class.getResource(quot;script.jsquot;) .getPath(); engine.eval(new FileReader(path));
  25. 25. 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;);
  26. 26. Padronizando com a JSR 223 Compilando o script ScriptEngine e = ... CompiledScript cs = ((Compilable) e) .compile(statement); cs.eval();
  27. 27. 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
  28. 28. Fim! Mais em: http://www.milfont.org
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×