SlideShare uma empresa Scribd logo
1 de 28
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
F I C+ + L P 05
F I C+ + L P 05F I C+ + L P 05
F I C+ + L P 05t34m0nana
 
Apresentação ruby + rails 2014
Apresentação ruby + rails 2014Apresentação ruby + rails 2014
Apresentação ruby + rails 2014Marcelo Bohn
 
Delphi Parallel Programming Library
Delphi Parallel Programming LibraryDelphi Parallel Programming Library
Delphi Parallel Programming LibraryMario Guedes
 
Ruby, Simples e Expressivo
Ruby, Simples e ExpressivoRuby, Simples e Expressivo
Ruby, Simples e ExpressivoRodrigo Martins
 
Delphi Conference 2012 - Programação Baseado em Regras com RTTI
Delphi Conference 2012 - Programação Baseado em Regras com RTTIDelphi Conference 2012 - Programação Baseado em Regras com RTTI
Delphi Conference 2012 - Programação Baseado em Regras com RTTIMario Guedes
 
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Emerson Macedo
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem PythonLuciano Ramalho
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sérioLuciano Ramalho
 
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptTDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptRogério Moraes de Carvalho
 
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...Rogério Moraes de Carvalho
 
Arduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojoArduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojoLuciano Ramalho
 
Seminário: JavaScript
Seminário: JavaScriptSeminário: JavaScript
Seminário: JavaScriptIvna Valença
 
Conhecendo Ruby on Rails
Conhecendo Ruby on RailsConhecendo Ruby on Rails
Conhecendo Ruby on RailsSergio Henrique
 

Mais procurados (20)

Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
F I C+ + L P 05
F I C+ + L P 05F I C+ + L P 05
F I C+ + L P 05
 
Seminário: Lua
Seminário: LuaSeminário: Lua
Seminário: Lua
 
Apresentação ruby + rails 2014
Apresentação ruby + rails 2014Apresentação ruby + rails 2014
Apresentação ruby + rails 2014
 
1.introducao java
1.introducao java1.introducao java
1.introducao java
 
Delphi Parallel Programming Library
Delphi Parallel Programming LibraryDelphi Parallel Programming Library
Delphi Parallel Programming Library
 
Palestra Ruby
Palestra RubyPalestra Ruby
Palestra Ruby
 
Ruby, Simples e Expressivo
Ruby, Simples e ExpressivoRuby, Simples e Expressivo
Ruby, Simples e Expressivo
 
Delphi Conference 2012 - Programação Baseado em Regras com RTTI
Delphi Conference 2012 - Programação Baseado em Regras com RTTIDelphi Conference 2012 - Programação Baseado em Regras com RTTI
Delphi Conference 2012 - Programação Baseado em Regras com RTTI
 
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
A Linguagem Ruby
A Linguagem RubyA Linguagem Ruby
A Linguagem Ruby
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sério
 
Seminário: Lisp
Seminário: LispSeminário: Lisp
Seminário: Lisp
 
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptTDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
 
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
 
Ruby
RubyRuby
Ruby
 
Arduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojoArduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojo
 
Seminário: JavaScript
Seminário: JavaScriptSeminário: JavaScript
Seminário: JavaScript
 
Conhecendo Ruby on Rails
Conhecendo Ruby on RailsConhecendo Ruby on Rails
Conhecendo Ruby on Rails
 

Destaque

Sead 29 09 2006 Usabilidade Com Ajax
Sead 29 09 2006 Usabilidade Com AjaxSead 29 09 2006 Usabilidade Com Ajax
Sead 29 09 2006 Usabilidade Com AjaxMilfont Consulting
 
Engine de template em Javascript com HTML Sprites
Engine de template em Javascript com HTML SpritesEngine de template em Javascript com HTML Sprites
Engine de template em Javascript com HTML SpritesMilfont Consulting
 
Combinando OO e Funcional em javascript de forma prática
Combinando OO e Funcional em javascript de forma práticaCombinando OO e Funcional em javascript de forma prática
Combinando OO e Funcional em javascript de forma práticaMilfont Consulting
 
Equipes sem Líderes formais e realmente autogeridas
Equipes sem Líderes formais e realmente autogeridasEquipes sem Líderes formais e realmente autogeridas
Equipes sem Líderes formais e realmente autogeridasMilfont Consulting
 

Destaque (6)

Sead 29 09 2006 Usabilidade Com Ajax
Sead 29 09 2006 Usabilidade Com AjaxSead 29 09 2006 Usabilidade Com Ajax
Sead 29 09 2006 Usabilidade Com Ajax
 
Mvc sem Controller
Mvc sem ControllerMvc sem Controller
Mvc sem Controller
 
Engine de template em Javascript com HTML Sprites
Engine de template em Javascript com HTML SpritesEngine de template em Javascript com HTML Sprites
Engine de template em Javascript com HTML Sprites
 
Combinando OO e Funcional em javascript de forma prática
Combinando OO e Funcional em javascript de forma práticaCombinando OO e Funcional em javascript de forma prática
Combinando OO e Funcional em javascript de forma prática
 
Beagajs
BeagajsBeagajs
Beagajs
 
Equipes sem Líderes formais e realmente autogeridas
Equipes sem Líderes formais e realmente autogeridasEquipes sem Líderes formais e realmente autogeridas
Equipes sem Líderes formais e realmente autogeridas
 

Semelhante a Conhecendo a JSR 223: Scripting for the Java Platform

Semelhante a Conhecendo a JSR 223: Scripting for the Java Platform (20)

Linguagens Dinamicas na JVM
Linguagens Dinamicas na JVMLinguagens Dinamicas na JVM
Linguagens Dinamicas na JVM
 
Introducao logica2
Introducao logica2Introducao logica2
Introducao logica2
 
Curso Java Basico
Curso Java BasicoCurso Java Basico
Curso Java Basico
 
Interop itcare: Interoperabilidade Java e .NET
Interop itcare: Interoperabilidade Java e .NETInterop itcare: Interoperabilidade Java e .NET
Interop itcare: Interoperabilidade Java e .NET
 
Java 01
Java 01Java 01
Java 01
 
Curso Gratuito de Shell Script
Curso Gratuito de Shell ScriptCurso Gratuito de Shell Script
Curso Gratuito de Shell Script
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java Fundamentos
 
Introdução a tecnologia Java
Introdução a tecnologia JavaIntrodução a tecnologia Java
Introdução a tecnologia Java
 
Introdução a tecnologia Java
Introdução a tecnologia JavaIntrodução a tecnologia Java
Introdução a tecnologia Java
 
JAVA: Muito mais que uma linguagem
JAVA: Muito mais que uma linguagemJAVA: Muito mais que uma linguagem
JAVA: Muito mais que uma linguagem
 
Java virtual machine quantas linguas fala a jvm2
Java virtual machine   quantas linguas fala a jvm2Java virtual machine   quantas linguas fala a jvm2
Java virtual machine quantas linguas fala a jvm2
 
Introdução ao java
Introdução ao javaIntrodução ao java
Introdução ao java
 
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
 
Java 9, 10 e ... 11
Java 9, 10 e ... 11Java 9, 10 e ... 11
Java 9, 10 e ... 11
 
Javascript
JavascriptJavascript
Javascript
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013
 
Produtividade em Java com Grails
Produtividade em Java com GrailsProdutividade em Java com Grails
Produtividade em Java com Grails
 
Java20141215 17[1]
Java20141215 17[1]Java20141215 17[1]
Java20141215 17[1]
 
Aula1
Aula1Aula1
Aula1
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rust
 

Mais de Milfont Consulting (20)

Continuous integration e continuous delivery para salvar o seu projeto!
Continuous integration e continuous delivery para salvar o seu projeto!Continuous integration e continuous delivery para salvar o seu projeto!
Continuous integration e continuous delivery para salvar o seu projeto!
 
MVC Model 3
MVC Model 3MVC Model 3
MVC Model 3
 
Dar caos à ordem
Dar caos à ordemDar caos à ordem
Dar caos à ordem
 
I TDD my jQuery code without Browser
I TDD my jQuery code without BrowserI TDD my jQuery code without Browser
I TDD my jQuery code without Browser
 
Oxente BDD
Oxente BDDOxente BDD
Oxente BDD
 
Construindo WebApps ricas com Rails e Sencha
Construindo WebApps ricas com Rails e SenchaConstruindo WebApps ricas com Rails e Sencha
Construindo WebApps ricas com Rails e Sencha
 
Dar Ordem ao Caos
Dar Ordem ao CaosDar Ordem ao Caos
Dar Ordem ao Caos
 
Domain driven design
Domain driven designDomain driven design
Domain driven design
 
BDD com Cucumber, Selenium e Rails
BDD com Cucumber, Selenium e RailsBDD com Cucumber, Selenium e Rails
BDD com Cucumber, Selenium e Rails
 
Mare de Agilidade - BDD e TDD
Mare de Agilidade - BDD e TDDMare de Agilidade - BDD e TDD
Mare de Agilidade - BDD e TDD
 
Apresentando Extreme Programming
Apresentando Extreme ProgrammingApresentando Extreme Programming
Apresentando Extreme Programming
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Behaviour Driven Development
Behaviour Driven DevelopmentBehaviour Driven Development
Behaviour Driven Development
 
Primeiro Dia Livre Opensocial
Primeiro Dia Livre OpensocialPrimeiro Dia Livre Opensocial
Primeiro Dia Livre Opensocial
 
Tw Dwr 2007 Ap01
Tw Dwr 2007 Ap01Tw Dwr 2007 Ap01
Tw Dwr 2007 Ap01
 
Course Hibernate 2008
Course Hibernate 2008Course Hibernate 2008
Course Hibernate 2008
 
Opensocial
OpensocialOpensocial
Opensocial
 
Frameworks Ajax
Frameworks AjaxFrameworks Ajax
Frameworks Ajax
 
OpenSocial CCT
OpenSocial CCTOpenSocial CCT
OpenSocial CCT
 
Cct Dsl
Cct DslCct Dsl
Cct Dsl
 

Conhecendo a JSR 223: Scripting for the Java Platform

  • 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. 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. 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. Porque outras linguagens? Pattern Quine Matching Lambda calculus Continuation List Closure comprehension Tail Call CurryingThunk backtracing High-order functions
  • 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. 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. 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. 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. 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. 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. Porque outras linguagens? Dois caminhos Transformar Java em multiparadigma ou Usar uma linguagem apropriada
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Padronizando com a JSR 223 Descobrindo e instanciando um mecanismo de engine ScriptEngineManager factory = new ScriptEngineManager(); ScriptEngine engine = factory.getEngineByName(quot;JavaScriptquot;);
  • 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. 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. 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. Padronizando com a JSR 223 Compilando o script ScriptEngine e = ... CompiledScript cs = ((Compilable) e) .compile(statement); cs.eval();
  • 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. Fim! Mais em: http://www.milfont.org