linguagens dinamicas na jvm
TRANSCRIPT
Linguagens Dinamicas na JVM: o futuro do Java como plataforma!
William Gouvea
Sun OSUM [email protected]
Porque??
Agenda
JVM /DaVinci
Onde ?Quais?
Deep Dive
Perguntas?
Slide 1: title and presenter's nameSlide 2: topic intro - what product/technology isSlide 3: topic intro - who is the target market (be very as specific as possible: e.g. geo, developer type, etc.)Slide 4: demoSlide 5: certificationSlide 6: call-to-actionSlide 7: resources: (URLs, where to go/who to call for more information, etc.)
Porque?
Paradigmas
Usar o paradigma que mais se encaixa, para resoluo do problema
Dominios Especificos
Linguagens que facilitam a criao/manuntenao de determinados tipos de aplicao
Corrigir/Adicionar Ferramentas a linguagem Java
Linguagem demora a adquirir certas caracteristicas usadas pelos programadores, devido a burocracia e grande utilizao
Porque ?
DSL's como SQL, Excel macros, trabalham diretamente com as regras de negocio do dominio da aplicao
Todas as linguagens so completas Turing, ou seja o jeito como as linguagens atacam os problemas sempre diferente e muda drasticamente sempre!
Liberdade de escolha, OpenSource, comunidade de desenvolvedores
Porque?
O cliente pode ter carros de todas as cores, portanto que eles sejam pretos-Henry Ford
Programadores podem usar qualquer linguagem que facilite a resoluo de um problema de forma agil e pragmatica, com exceo dos Code Monkeys =P
Porque? A origem!
Processador executa instrues de maquina sobre dados
Dados vem ou da memoria externa(RAM) ou dos registradores
Instrues so particulares para cada processador
Basicamente , no importa a linguagem, o processador s trabalha com instrues e dados binarios!
Porque a JVM?
Linguagens necessitam de suporte de execuo como GC, Gerencia de Memoria, etc
Todo problema em Cincia da Computao pode ser resolvido com uma camada de abstrao- Butler Lampson , VM essa camada, abstraindo o hardware
Portabilidade, Segurana, Performance
Controle de Excees nativo
Suporte Multithread nativo
Porque? A Origem
Linguagens Compiladas
Linguagens Interpretadas
Write once, Run Anywhere
Linguagens Compiladas
ScannerParserAnalisadorSintaticoAnalisadorSemanticoOtimizadorGeradorde CodigoTokensParser TreeRepresentaoIntermediariaRepresentaoIntermediariaCodigode MaquinaAlvo
Linguagens Interpretadas
INTERPRETADORCdigo FonteDados
OUTPUT
Porque??
Agenda
JVM /DaVinci
Onde ?Quais?
Deep Dive
Perguntas?
Slide 1: title and presenter's nameSlide 2: topic intro - what product/technology isSlide 3: topic intro - who is the target market (be very as specific as possible: e.g. geo, developer type, etc.)Slide 4: demoSlide 5: certificationSlide 6: call-to-actionSlide 7: resources: (URLs, where to go/who to call for more information, etc.)
WORA??
Programas em Java, geralmente tem seu codigo fonte compilado para o formato intermediario .class
Programa pode ser composto de varios arquivos .class, empacotados em um arquivo .jar
Java possui uma linguagem intermediaria, chamada bytecode, que seria o formato das instruoes executadas(interpretadas) pela JVM
Compilador JIT(Just in time) , em tempo de execuo compila bytecodes para codigo nativo, aumentando a performance
JVM Sun Hotspot verifica partes do codigo que so muito executadas e compila estes para codigo nativo
JVM da Sun conta otimizao adaptativa, ou seja, melhora com o tempo, sendo mais performatica em alguns casos, do que C++ e Assembly
JVM(JRE)
CLASSLOADERJRE
Intepretador de BytecodesIndependentes de Plataforma.class / .jar
JVM (JRE)
Class Loader, ou carregador de classes
Interpretador de Bytecodes
Client/Server VM's
GC's como Mark/Sweep, G1
Conjunto de Libs de execuo
Outras Linguagens
Ruby ==>JRuby
Pyhon ==>Jython
PHP==>Quercus
Javascript==>Rhino
Groovy
JavaFX
Clojure
Scala
Linguagens Dinamicas
Recursos da plataforma Java
Vasto ecossistema de frameworks e bibliotecas opensource
Possibilidade de atacar diversos tipos de problemas com a ferramenta certa
Evitar soltar um parafuso com um alicate, ou matar moscas com bazuca!
Linguagens Dinamicas
JVM nao possui suporte para linguagens dinamicamente tipadas devido as instrues da JVM serem tipadas e dificil modificao de classe e metodos dinamicamente
JSR-223 incorporado ao Mustang(Java 6)
JSR-292 possivelmente no Java7
JSR-223
Acessar e controlar objetos Java em ambientes script
Criar conteudo para web com linguagens dinamicas(PHP, Rails,Grails,Django)
Integrar ambientes script com tecnologias Java
JSR-292
Adicionar instruo invokedynamic na JVM permitindo invocao de metodos sem a checagem de tipos
Soluo para modificar classes e metodos em tempo de execuo
Parte essencial do projeto DaVinci
DaVinci Virtual Machine
Suporte arquitetural de primeira classe para linguagens , sem ser o Java
Ideia de rodar outras linguagens com performance comparavel a da linguagem Java
Ideia de coexistencia, tornando a JVM uma plataforma universal para todas as linguagens
Acabar com os painpoints dos desenvolvedores de linguagens, que podero usar a JVM com facilidade
Porque??
Agenda
JVM /DaVinci
Concluso
Deep Dive
Perguntas?
Slide 1: title and presenter's nameSlide 2: topic intro - what product/technology isSlide 3: topic intro - who is the target market (be very as specific as possible: e.g. geo, developer type, etc.)Slide 4: demoSlide 5: certificationSlide 6: call-to-actionSlide 7: resources: (URLs, where to go/who to call for more information, etc.)
Python/Jython
Jython trouxe o Python para JVM
Projeto Jython liderado por Frank Wierzbicki, atualmente na SUN
Python foi originalmente criado por Guido Von Rossum
Python facil de aprender mas ao mesmo tempo poderosa de usar
Jython pode acessar libs e frameworks escritos tanto em Python como em Java!
Python/Jython
Linguagem que mais cresceu no ranking Tiobe(http://www.tiobe.com) em 2007
Elegante, Legivel, Robusta
Multiparadigma
Multidominio
Python/Jython
Google utiliza em toda sua infraestrutura,podendo destacar Youtube, GoogleMaps e GAE
Crescente utilizao para Web atraves de frameworks como Django, TurboGears
Utilizada no novo IPS do OpenSolaris
Utilizada para tarefas de admin no RedHat, Ubuntu
Python/Jython
print hello world
def hello(name):
print hello, name
Python/Jython
//Jython using Swing Jtable
from javax.swing import JTable
from javax.swing import JFrame
rowdata = [('bill', 'Bill Williams')]
colnames = ['user name', 'full name']
table = JTable(rowdata, colnames)
frame = JFrame("Table")
frame.getContentPane().add( table )
frame.size = 400, 300
frame.visible = 1
Javascript/Rhino/AJAX!?
Linguagem script mais usada, em todos os browsers,Flash(ActionScript), Server-Side(Phobos, Rhino,JMaki,ASP)
Boa para codificar GUI's ex:JQuery, ExtJS
Multiparadigma contando com closures,herana baseada em prototipo
AJAX faz com que seja indispensavel nos dias de hoje
Javascript/Rhino
Rhino+JSR223 integrados por padro no Java6
Javascript por ser mais flexivel, pode ser usada em uma serie de finalidades como regras de negocios que mudam frequentemente
Usado pelo Mozilla
Javascript/Rhino
//Hello World Javascript on the JVM!
import javax.script.*;
public class EvalScript {
public static void main(String[] args) throws Exception {
// cria um gerente para o motor de scripts
ScriptEngineManager factory = new ScriptEngineManager();
// cria o motor JavaScript como mostrado nos exemplos anteriores
ScriptEngine engine = factory.getEngineByName("js");
// interpreta o codigo Javascript
engine.eval("print('Hello World, Javascript on the JVM')");
}
}
Ruby/JRuby
Criado por Yukihiro Matsumoto ou Matz em 1995
Mais poderosa que o Perl e mais OO que o Python, alem de coisa vinda do SmallTalk ,Eiffel e Lisp
Tipagem forte
Puramente OO (Tudo um objeto)
Dinamica
Focada na simplicidade, produtividade e na felicidade par ao programador
Ruby/JRuby
7.class => Fixnum
hello.length => 5
3.times { |i| puts Number #{i} }
=> Number 1
Number 2
Number 3
Ruby/JRuby
Linguagem dinamicamente tipada, ou seja, sem necessidade de declarao de tipos de variaveis
DuckTyping=>Se faz quack como um pato e anda como um pato, ento um pato
Classe no so tipos, so objetos!
Ruby/JRuby
Def fazer_quack(quacker)
quacker.quack
end
fazer_quack(Pato.new)
fazer_quack(Pinguin.new)
fazer_quack(Polvo.new)
Ruby/JRuby
Aucares Sintaticos
Arrays: ['one', 1, Ein.new], %w(several words here)
Arrays Associativos (hashes): {'a' => 3, 'b' => 4}
Strings: foo, %[abc foo bar is a string]
Ruby/JRuby
Modules(Mixins)
Sem parentesis
Sem ponto e virgula
Chave ou do...end
Blocos ou Closures, internalizam codigo transacional, remove repetio
Metodos anonimos que podem ser invocados no final de outros metodos
Ruby/JRuby
Projeto iniciado em 2001
Charles Nutter, Thomas Enebo contratados pela SUN em 2005
JRuby a verso mais rapida, sendo de 2x-5x mais rapida que outras verses
Melhor scalabilidade com threads nativas
AOT/JIT
Boa forma de colocar o Ruby no ambiente corporativo
Integrao com libs/frameworks Java e vice-versa
http://jruby.org/
Ruby/JRuby
require 'java'
import java.util.HashMap
h = HashMap.new
h[foo] = bar
h[quux] = baz
h.key_set.sort.each { |key| puts key }
Ruby/JRuby
// Carregando o Ruby runtime
ScriptEngineManager factory =
new ScriptEngineManager();
ScriptEngine engine =
factory.getEngineByName("jruby");
// Evaluate JRuby code from string.
try {
engine.eval("puts('Hello')");
} catch (ScriptException exception) {
exception.printStackTrace();
}
Ruby/JRuby
Projeto Kenai
Mingle
Oracle Mix
MediaCast SUN
Slideshare
Justin.TV
Milhares de outros projetos
Outras linguagens
Kawa,Jatha , Groovy, BeanShell,
Pnuts, Jacl (TCL), JudoScript,Ioke
Jaskell, Sleep (Perl), Jelly, AWK, JEP,
Jexl, JST, SISC (Scheme), Athena
(Smaltalk), Jepp (Python native),
Quercus (PHP), BexScript, Jasconn
(AppleScript), JavaFX...
http://en.wikipedia.org/wiki/List_of_JVM_languages
http://www.is-research.de/info/vmlanguages/
Groovy
OO
Sintaxe bem parecida com Java
Executa codigo Java sem modificao
Sintaxe simples sem parentesis e pontovirgula
Listas, Mapas e Expresses Regulares
Integrao Bi-Direcional
Closures, MOP
http://groovy.codehaus.org/Portuguese+Home
Clojure
Criada por Rich Hickey em
Funcional e no OO
Funes de primeira classe!
STM
Suporte a Concorrencia/Multicore/Paralelismo
Dados Imutaveis
Integrada com Java
Dialeto Lisp
http://clojure.org/
Clojure
(defn hello [name]
(println "Hello," name))
(defn factorial-1 [number]
"calcula fatorial de um numero, sem estourar a memoria"
(loop [n number factorial 1]
(if (zero? n)
factorial
(recur (dec n) (* factorial n)))))
Scala
Criada por Martin Odersky em 2001
OO e Funcional
Linguagem de proposito geral
Alto e perfeito suporte a concorrencia/paralelismo
Tipagem Estatica
Postfix e Infix
http://www.scala-lang.org
Integrao com outras tecnologias
Netbeans foi eleita a melhor IDE para Jruby/Rails em 2008
Ja possui suporte a Python com suporte a Jython/Django previsto para verso 7
Suporte a desenvolvimento Groovy/Grails
Suporte a desenvolvimento Javascript
Verso exclusiva para JavaFX
Plugin para Clojure
Integrao com outras tecnologias
Possibilidade de deployment no Glassfish v2 atraves de um arquivo .war
Glassfish v3 possui integrao com novos frameworks sendo o container perfeito, para Java e outras linguagens
Facilidade dada atraves do IPS do Glassfish v3
Linguagens Dinamicas e Frameworks
http://glassfish-scripting.dev.java.net
Porque??
Agenda
JVM /DaVinci
Concluso
Deep Dive
Perguntas?
Slide 1: title and presenter's nameSlide 2: topic intro - what product/technology isSlide 3: topic intro - who is the target market (be very as specific as possible: e.g. geo, developer type, etc.)Slide 4: demoSlide 5: certificationSlide 6: call-to-actionSlide 7: resources: (URLs, where to go/who to call for more information, etc.)
Concluso
Mercado em expanso
Tendencias como NoSQL, Cloud Computing esto impulsionando o desenvolvimento com novas linguagens
Novos paradigmas e problemas!
Como dito no livro Pragmatic Programmer, o bom programdor deve aprender varias linguagens, pelo menos uma por ano
Grandes nomes do TI como Sun, Microsoft, IBM e Oracle apostam nestas linguagens
Porque??
Agenda
JVM /DaVinci
Concluso
Deep Dive
Perguntas?
Slide 1: title and presenter's nameSlide 2: topic intro - what product/technology isSlide 3: topic intro - who is the target market (be very as specific as possible: e.g. geo, developer type, etc.)Slide 4: demoSlide 5: certificationSlide 6: call-to-actionSlide 7: resources: (URLs, where to go/who to call for more information, etc.)
Linguagens Dinamicas na JVM: o futuro do Java como plataforma!
William Gouvea
Sun OSUM [email protected]
Obrigado pelo seu tempo!
Click to edit the title text format
Presenters Name
Presenters Title
Presenters Company
Click to edit the notes format
Page
Click to edit the title text format
Click to edit the outline text format
Second Outline Level
GlassFish: The Best Open Source Application Server
Page