¿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
      Programa em Java


           Bytecode


             JVM


      Sistema Operacional


           Hardware
A Java Virtual Machine
             Programa em Java


A JVM não         Bytecode

 conhece
                    JVM
Java!!! Só
 bytecode    Sistema Operacional


                  Hardware
Por que a JVM?

Coleta de   Gerência de
                          Portabilidade
  Lixo       Memória


                          Controle de
Segurança   Performance
                           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

                    JVM com
  JSR 223       tipagem estática


            JSR-292




        Linguagens
     dinâmicas na JVM
As estrelas do momento

                  Java

        Earlang           Ruby




  Javascript      JVM         Clojure




        Groovy            Python

                  Scala
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/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')");
    }
}
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
• Twitter
• 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

Java virtual machine quantas linguas fala a jvm2

  • 1.
    ¿Java? Virtual Machine Quantaslínguas fala a JVM?
  • 2.
    Agenda • Introdução • AJava Virtual Machine • A JVM Dinâmica • A JVM de Babel • Ferramentas para programadores poliglotas • Conclusão • Perguntas
  • 3.
    INTRODUÇÃO Como anda omercado em relação à linguagem Java
  • 4.
    Panorama • Linguagem Javaevolui 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
  • 5.
    Panorama - Exigências Hardware Software Peopleware
  • 6.
    E O QUEA 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 VirtualMachine Programa em Java Bytecode JVM Sistema Operacional Hardware
  • 8.
    A Java VirtualMachine Programa em Java A JVM não Bytecode conhece JVM Java!!! Só bytecode Sistema Operacional Hardware
  • 9.
    Por que aJVM? Coleta de Gerência de Portabilidade Lixo Memória Controle de Segurança Performance Exceções Suporte a Multithread
  • 10.
    Por que outraslinguagens? • 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
  • 11.
    A JVM DINÂMICA Osuporte da JVM a linguagens dinâmicas
  • 12.
    Linguagens dinâmicas • Recursosda 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 domomento Java Earlang Ruby Javascript JVM Clojure Groovy Python Scala
  • 15.
    DaVinci • Suporte arquiteturalde 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 DEBABEL Algumas das muitas línguas da JVM
  • 17.
    Python Alto nível Interpretada Imperativa Orientada aobjetos Tipagem dinâmica e forte Multiparadigma
  • 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 trouxeo 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
  • 20.
    Jython + SwingJtable 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
  • 21.
    Javascript/Rhino/AJAX!? • Linguagem scriptmais 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 integradospor 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 classEvalScript { 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 poderosaque 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
  • 26.
  • 27.
    Ruby/JRuby • Projeto iniciadoem 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/
  • 28.
    Ruby/JRuby • Projeto Kenai •Oracle Mix • Slideshare • Twitter • Justin.TV • Milhares de outros projetos
  • 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 • Sintaxebem 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 porMartin 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
  • 32.
    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/
  • 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
  • 35.
    Linguagens Dinâmicas e Frameworks http://glassfish-scripting.dev.java.net
  • 36.
    Conclusão • Mercado emexpansã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
  • 37.