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!
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