conhecendo a jsr 223: scripting for the java platform
DESCRIPTION
Palestra ministrada no evento "Café com Tapioca" realizado no dia 23 de janeiro de 2008 pelo CEJUG (Ceará Java User Group)TRANSCRIPT
Conhecendo a JSR 223:
Scripting for the Java Platform
Christiano M ilfonthttp://w w w.m ilfont.org
Roadmap 1 – Porque outras linguagens? 2 – JVM vs CLR3 – Outras linguagens na JVM
4 – Padronizando com a JSR 2235 – Desvantagens com scripting
Porque outras linguagens?
Declarativo Vs Imperativo
Funcional vs Orientado a objetos
Tipos dinâmicos Vs EstáticosTipos fracos vs Tipos Fortes
Prototype-based Vs Class-based
Porque outras linguagens?
CurryingTail Call
High-order functions
QuineClosureContinuation
Pattern Matching
backtracingThunk
List comprehension
Lambda calculus
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
SELECT * FROM TABLE
SGBD controla armazenamento, transação, concorrência, busca... o programador simplesmente escreve
... Todo desenvolvedor que trabalha com web conhece mais de uma linguagem: XML, HTML,CSS
LINQ - C# 3Macro - ExcelABAP - SAP
Porque outras linguagens? Linguagem correta para problema
using System; using System.IO; public class RemoveArquivosVelhos { public static void Main(string[] args) { foreach (FileInfo fi in (new DirectoryInfo (@“\temp\backup”)).GetFiles()) { if (((TimeSpan) (DateTime.Now - fi.LastWriteTime)).Days > 7) { fi.Delete(); } } } }
Usando C#
find /usr -atime +6 -exec rm -f "{}" ";"Usando Bash
Porque outras linguagens? Sem reinventar a roda
Trapaceando com Ruby
def thumbnail(temp, target) system("/usr/local/bin/convert #{escape(temp)} -resize 48x48! #{escape(target)}")end
Porque outras linguagens? DEPLOY
[cmilfont]: Nada, aguarda aí que é rapi10, so o tempo do deploy
[Cliente no gtalk: Gostaria de inserir uma regrinha, demora muito?
[Cliente no gtalk]: O.o
Porque outras linguagens? Tendência
Google uses Python for backends of web apps such as Gmail and GMaps
SimpleDB, Amazon.com's document-based database written in Erlang
Youtube uses Python "to produce maintainable features in record times,
with a minimum of developers"
Fonte: http://en.wikipedia.org
Porque outras linguagens? Dois caminhos
Usar uma linguagem apropriada
Transformar Java em multiparadigmaou
Porque outras linguagens? Java com Closure
...ou melhorar o suporte da JVM às outras linguagens?
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) {} }}
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!
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!
JVM vs CLR
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...
List comprehensions
getEvenNumbers aList = [ x | x >- aList, x `mod` 2 = 0]
def getEvenNumbers(l : List[int]) = for { val i <- l i % 2 == 0 } yield i
Jaskell
Scala
Jythondef getEvenNumbers(l): return [x for x in l if x % 2 == 0]
Outras linguagens na JVM
http://jasp.ism.ac.jp/overview-e.html
Java - Network, IO, JNI...
Outras linguagens na JVM
Jasp (Java Based Statistical Processor)
Pnuts - Scripting
Linguagem construída sobre uma outra linguagem de Scripting
Padronizando com a JSR 223
Projeto de pesquisa de Sanjiva Weerawarana no T.J. Watson Research Center da IBM em 1999
Bean Scripting Framework
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 223JSR 223
Scripting for the java PlataformAPI 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 223API simples
javax.script.AbstractScriptingEnginejavax.script.Bindingsjavax.script.Compilablejavax.script.CompiledScriptjavax.script.Invocablejavax.script.ScriptContextjavax.script.ScriptEngine;javax.script.ScriptEngineFactoryjavax.script.ScriptEngineManager;javax.script.ScriptException;javax.script.SimpleBindingsjavax.script.SimpleScriptContext
Padronizando com a JSR 223
Descobrindo e instanciando um mecanismo de engine
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
Padronizando com a JSR 223
Construindo e executando o scriptString [] script = {
"var a = 2;","var b = 3;","var c = a + b;","print(\"a + b = \" + c);"
};engine.eval(script));
Padronizando com a JSR 223
Executando um script em arquivo
String path = NotaFiscal.class.getResource("script.js")
.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("total", this.total);String path = getArquivo();engine.eval(new FileReader(path));this.total = (Double) engine.get("total");
Padronizando com a JSR 223
Compilando o script
ScriptEngine e = ...CompiledScript cs = ((Compilable) e)
.compile(statement);cs.eval();
Desvantagens com scripting
PerformanceSintaxes extranhas
DebugMais pontos de manutençãoPouco pessoal qualificadoAprender muitos paradigmas *
* Deveria ser vantagem mas é o terror dos Code Monkeys
Fim!Mais em:
http://www.milfont.org