java virtual machine quantas linguas fala a jvm2
DESCRIPTION
Palestra que fala da JVM e as muitas linguagens que que ela suporta. Essa palestra eu ministrei no UAIJUG, na primeira reunião mensal.TRANSCRIPT
¿Java? Virtual Machine
Quantas línguas fala a JVM?
Agenda
• Introdução
• A Java Virtual Machine
• A JVM Dinâmica
• A JVM de Babel
• Ferramentas para programadores poliglotas
• Conclusão
• Perguntas
INTRODUÇÃO
Como anda o mercado em relação à linguagem Java
Panorama
• Linguagem Java evolui lentamente
• Futuro do Java ainda é incerto devido à Oracle
• Existem diversas linguagens dinâmicas no mercado
• Python, PHP, Ruby, Scala, Groovy, Clojure...
• Muitas em ascensão
• Mercado exige cada vez mais performance
Panorama - Exigências
Hardware Software Peopleware
E O QUE A JVM TEM A VER COM
ISSO?
Quais as vantagens de usar a JVM para resolver os problemas de desempenho do
dispositivo entre a cadeira e o monitor.
A Java Virtual Machine
A Java Virtual Machine
A JVM não conhece
Java!!! Só bytecode
Por que a JVM?
Coleta de Lixo
Gerência de Memória
Portabilidade
Segurança
Performance
Controle de Exceções
Suporte a Multithread
Por que outras linguagens?
• Paradigmas
• Usar o paradigma que mais se encaixa, para resolução do problema
• Domínios Específicos
• Linguagens que facilitam a criação/manutenção de determinados tipos de aplicação
• Ferramentas
• Corrigir/Adicionar Ferramentas a linguagem Java
• Linguagem demora a adquirir certas características usadas pelos programadores, devido a burocracia e grande utilização
A JVM DINÂMICA
O suporte da JVM a linguagens dinâmicas
Linguagens dinâmicas
• 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 dinâmicas
Linguagens dinâmicas na JVM
JSR-292
JSR 223
JVM com
tipagem
estática
As estrelas do momento
JVM
DaVinci
• Suporte arquitetural de primeira classe para linguagens , sem ser o Java
• Idéia de rodar outras linguagens com performance comparável a da linguagem Java
• Idéia de coexistência, tornando a JVM uma plataforma “universal” para todas as linguagens
• Acabar com a dificuldade dos desenvolvedores de linguagens, que poderão usar a JVM com facilidade
A JVM DE BABEL
Algumas das muitas línguas da JVM
Python
Alto nível
Interpretada
Imperativa
Orientada a objetos
Tipagem dinâmica e forte
Multiparadigma
Python/Jython• Elegante, Legível, Robusta
• Google utiliza em toda sua infraestrutura, podendo destacar Youtube, GoogleMaps e GAE
• Crescente utilização para Web através de frameworks como Django, TurboGears
• Utilizada para tarefas administrativas em diversas distribuições Linux
Python/Jython• Jython trouxe o Python para JVM
• Linguagem fácil de aprender mas ao mesmo tempo poderosa de usar
• Jython pode acessar libs e frameworks escritos tanto em Python como em Java!
Python
Java
Jython
Jython + 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,herança baseada em protótipo
• AJAX faz com que seja indispensável nos dias de hoje
Javascript/Rhino• Rhino+JSR223 integrados por padrão no
Java6
• Javascript por ser mais flexível, pode ser usada em uma série de finalidades como regras de negócios que mudam freqüentemente
• Usado pelo Mozilla
Javascript/Rhinoimport 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
• Mais poderosa que o Perl e mais OO que o Python
• Influências de SmallTalk ,Eiffel e Lisp
• Tipagem dinâmica e forte
• Puramente OO (Tudo é um objeto)
• Focada na simplicidade, produtividade e na felicidade do programador
Ruby/JRuby
7.class => Fixnum
“hello”.length => 5
3.times { |i| puts “Number #{i}” }
=> Number 1
Number 2
Number 3
Ruby/JRuby
Def fazer_quack(quacker)
quacker.quack
end
fazer_quack(Pato.new)
fazer_quack(Pinguin.new)
fazer_quack(Polvo.new)
Ruby/JRuby
• Projeto iniciado em 2001
• Melhor escalabilidade
• JRuby é a versão mais rápida, sendo de 2x-5x mais rápida que outras versões e com threads nativas
• Boa forma de colocar o Ruby no ambiente corporativo
• Integração com libs/frameworks Java e vice-versa
• http://jruby.org/
Ruby/JRuby
• Projeto Kenai
• Oracle Mix
• Slideshare
• Justin.TV
• Milhares de outros projetos
Clojure
• Dialeto Lisp
• Funcional e não OO
• Funções de primeira classe!
• STM - Software transactional memory
• Suporte a Concorrência/Multicore/Paralelismo
• Dados Imutáveis
• Integrada com Java
• http://clojure.org/
Groovy
• OO
• Sintaxe bem parecida com Java
• Executa código Java sem modificação
• Sintaxe simples sem parêntesis e ponto virgula
• Listas, Mapas e Expressões Regulares
• Integração Bi-Direcional
• http://groovy.codehaus.org/Portuguese+Home
Scala
• Criada por Martin Odersky em 2001
• OO e Funcional
• Linguagem de propósito geral
• Alto e perfeito suporte a concorrência/paralelismo
• Tipagem Estática
• http://www.scala-lang.org
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/
FERRAMENTAS PARA
PROGRAMADORES POLIGLOTAS
Ferramentas e tecnologias para programadores poliglotas
Integração com outras tecnologias
• Netbeans possui suporte à todas as linguagens vistas até agora
• Eclipse tem suporte a várias dessas linguagens
• Glassfish v3 possui integração com novos frameworks sendo o “container” perfeito, para Java e outras linguagens
Linguagens Dinâmicas e Frameworks
http://glassfish-scripting.dev.java.net
Conclusão
• Mercado em expansão
• Tendências como NoSQL, Cloud Computing estão impulsionando o desenvolvimento com novas linguagens
• Novos paradigmas e problemas!
• Como dito no livro “Pragmatic Programmer”, o bom programador deve aprender várias linguagens, pelo menos uma por ano
• Grandes nomes do TI como Sun, Microsoft, IBM e Oracle apostam nestas linguagens
Perguntas