Este documento discute como a Java Virtual Machine (JVM) suporta múltiplas linguagens de programação além do Java, incluindo Python, JavaScript, Ruby, Clojure e outras. A JVM permite que essas linguagens sejam executadas com desempenho comparável ao Java devido à otimização do bytecode. Isso torna a JVM uma plataforma universal para várias linguagens.
4. 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
6. 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.
7. A Java Virtual Machine
Programa em Java
Bytecode
JVM
Sistema Operacional
Hardware
8. A Java Virtual Machine
Programa em Java
A JVM não Bytecode
conhece
JVM
Java!!! Só
bytecode Sistema Operacional
Hardware
9. Por que a JVM?
Coleta de Gerência de
Portabilidade
Lixo Memória
Controle de
Segurança Performance
Exceções
Suporte a
Multithread
10. 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
12. 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!
13. Linguagens dinâmicas
JVM com
JSR 223 tipagem estática
JSR-292
Linguagens
dinâmicas na JVM
14. As estrelas do momento
Java
Earlang Ruby
Javascript JVM Clojure
Groovy Python
Scala
15. 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
16. A JVM DE BABEL
Algumas das muitas línguas da JVM
18. 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
19. 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
21. 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
22. 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
23. Javascript/Rhino
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')");
}
}
24. 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
25. Ruby/JRuby
7.class => Fixnum
“hello”.length => 5
3.times { |i| puts “Number #{i}” }
=> Number 1
Number 2
Number 3
27. 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/
29. 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/
30. 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
31. 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
33. FERRAMENTAS
PARA
PROGRAMADORES
POLIGLOTAS
Ferramentas e tecnologias para
programadores poliglotas
34. 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
36. 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