conhecendo a jsr 223: scripting for the java platform

28
Conhecendo a JSR 223: Scripting for the Java Platform Christiano M ilfont http://w w w.m ilfont.org

Upload: milfont-consulting

Post on 18-Nov-2014

6.106 views

Category:

Technology


2 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Conhecendo a JSR 223: Scripting for the Java Platform

Conhecendo a JSR 223:

Scripting for the Java Platform

Christiano M ilfonthttp://w w w.m ilfont.org

Page 2: Conhecendo a JSR 223: Scripting for the Java Platform

Roadmap 1 – Porque outras linguagens? 2 – JVM vs CLR3 – Outras linguagens na JVM

4 – Padronizando com a JSR 2235 – Desvantagens com scripting

Page 3: Conhecendo a JSR 223: Scripting for the Java Platform

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

Page 4: Conhecendo a JSR 223: Scripting for the Java Platform

Porque outras linguagens?

CurryingTail Call

High-order functions

QuineClosureContinuation

Pattern Matching

backtracingThunk

List comprehension

Lambda calculus

Page 5: Conhecendo a JSR 223: Scripting for the Java Platform

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

Page 6: Conhecendo a JSR 223: Scripting for the Java Platform

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

Page 7: Conhecendo a JSR 223: Scripting for the Java Platform

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

Page 8: Conhecendo a JSR 223: Scripting for the Java Platform

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

Page 9: Conhecendo a JSR 223: Scripting for the Java Platform

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

Page 10: Conhecendo a JSR 223: Scripting for the Java Platform

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

Page 11: Conhecendo a JSR 223: Scripting for the Java Platform

Porque outras linguagens? Dois caminhos

Usar uma linguagem apropriada

Transformar Java em multiparadigmaou

Page 12: Conhecendo a JSR 223: Scripting for the Java Platform

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) {} }}

Page 13: Conhecendo a JSR 223: Scripting for the Java Platform

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!

Page 14: Conhecendo a JSR 223: Scripting for the Java Platform

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

Page 15: Conhecendo a 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...

Page 16: Conhecendo a JSR 223: Scripting for the Java Platform

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

Page 17: Conhecendo a JSR 223: Scripting for the Java Platform

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

Page 18: Conhecendo a JSR 223: Scripting for the Java Platform

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

Page 19: Conhecendo a JSR 223: Scripting for the Java Platform

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!

Page 20: Conhecendo a JSR 223: Scripting for the Java Platform

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)

Page 21: Conhecendo a JSR 223: Scripting for the Java Platform

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

Page 22: Conhecendo a JSR 223: Scripting for the Java Platform

Padronizando com a JSR 223

Descobrindo e instanciando um mecanismo de engine

ScriptEngineManager factory = new ScriptEngineManager();

ScriptEngine engine = factory.getEngineByName("JavaScript");

Page 23: Conhecendo a JSR 223: Scripting for the Java Platform

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));

Page 24: Conhecendo a JSR 223: Scripting for the Java Platform

Padronizando com a JSR 223

Executando um script em arquivo

String path = NotaFiscal.class.getResource("script.js")

.getPath();

engine.eval(new FileReader(path));

Page 25: Conhecendo a JSR 223: Scripting for the Java Platform

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");

Page 26: Conhecendo a JSR 223: Scripting for the Java Platform

Padronizando com a JSR 223

Compilando o script

ScriptEngine e = ...CompiledScript cs = ((Compilable) e)

.compile(statement);cs.eval();

Page 27: Conhecendo a JSR 223: Scripting for the Java Platform

Desvantagens com scripting

PerformanceSintaxes extranhas

DebugMais pontos de manutençãoPouco pessoal qualificadoAprender muitos paradigmas *

* Deveria ser vantagem mas é o terror dos Code Monkeys

Page 28: Conhecendo a JSR 223: Scripting for the Java Platform

Fim!Mais em:

http://www.milfont.org