Linguagens Dinamicas na JVM

1,903 views

Published on

Deep Dive na plataforma Java, cobrindo os motivos da JVM/JRE ser a menina dos olhos em um mundo de TI poliglota! PErformance, Segurança, Jython, JRuby e muito mais!

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,903
On SlideShare
0
From Embeds
0
Number of Embeds
49
Actions
Shares
0
Downloads
34
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • Slide 1: title and presenter's name Slide 2: topic intro - what product/technology is Slide 3: topic intro - who is the target market (be very as specific as possible: e.g. geo, developer type, etc.) Slide 4: demo Slide 5: certification Slide 6: call-to-action Slide 7: resources: (URLs, where to go/who to call for more information, etc.)
  • Slide 1: title and presenter's name Slide 2: topic intro - what product/technology is Slide 3: topic intro - who is the target market (be very as specific as possible: e.g. geo, developer type, etc.) Slide 4: demo Slide 5: certification Slide 6: call-to-action Slide 7: resources: (URLs, where to go/who to call for more information, etc.)
  • Slide 1: title and presenter's name Slide 2: topic intro - what product/technology is Slide 3: topic intro - who is the target market (be very as specific as possible: e.g. geo, developer type, etc.) Slide 4: demo Slide 5: certification Slide 6: call-to-action Slide 7: resources: (URLs, where to go/who to call for more information, etc.)
  • Slide 1: title and presenter's name Slide 2: topic intro - what product/technology is Slide 3: topic intro - who is the target market (be very as specific as possible: e.g. geo, developer type, etc.) Slide 4: demo Slide 5: certification Slide 6: call-to-action Slide 7: resources: (URLs, where to go/who to call for more information, etc.)
  • Slide 1: title and presenter's name Slide 2: topic intro - what product/technology is Slide 3: topic intro - who is the target market (be very as specific as possible: e.g. geo, developer type, etc.) Slide 4: demo Slide 5: certification Slide 6: call-to-action Slide 7: resources: (URLs, where to go/who to call for more information, etc.)
  • Linguagens Dinamicas na JVM

    1. 1. Linguagens Dinamicas na JVM: o futuro do Java como plataforma! <ul><li>William Gouvea </li></ul>Sun OSUM Leader [email_address]
    2. 2. Porque?? Agenda JVM /DaVinci Onde ?Quais? Deep Dive Perguntas?
    3. 3. Porque? <ul><li>Paradigmas </li></ul><ul><ul><li>Usar o paradigma que mais se encaixa, para resolução do problema </li></ul></ul><ul><li>Dominios Especificos </li></ul><ul><li>Linguagens que facilitam a criação/manuntençao de determinados tipos de aplicação </li></ul><ul><li>Corrigir/Adicionar Ferramentas a linguagem Java </li></ul><ul><ul><li>Linguagem demora a adquirir certas caracteristicas usadas pelos programadores, devido a burocracia e grande utilização </li></ul></ul>
    4. 4. Porque ? <ul><li>DSL's como SQL, Excel macros, trabalham diretamente com as regras de negocio do dominio da aplicação </li></ul><ul><li>Todas as linguagens são completas Turing, ou seja o jeito como as linguagens atacam os problemas é sempre diferente e muda drasticamente sempre! </li></ul><ul><li>Liberdade de escolha, OpenSource, comunidade de desenvolvedores </li></ul>
    5. 5. Porque? <ul><li>“ O cliente pode ter carros de todas as cores, portanto que eles sejam pretos”-Henry Ford </li></ul><ul><li>Programadores podem usar qualquer linguagem que facilite a resolução de um problema de forma agil e pragmatica, com exceção dos Code Monkeys =P </li></ul>
    6. 6. Porque? A origem! <ul><li>Processador executa instruções de maquina sobre dados </li></ul><ul><li>Dados vem ou da memoria externa(RAM) ou dos registradores </li></ul><ul><li>Instruções são particulares para cada processador </li></ul><ul><li>Basicamente , não importa a linguagem, o processador só trabalha com instruções e dados binarios! </li></ul>
    7. 7. Porque a JVM? <ul><li>Linguagens necessitam de suporte de execução como GC, Gerencia de Memoria, etc </li></ul><ul><li>“ Todo problema em Ciência da Computação pode ser resolvido com uma camada de abstração”- Butler Lampson , VM é essa camada, abstraindo o hardware </li></ul><ul><li>Portabilidade, Segurança, Performance </li></ul><ul><li>Controle de Exceções nativo </li></ul><ul><li>Suporte á Multithread nativo </li></ul>
    8. 8. Porque? A Origem <ul><li>Linguagens Compiladas </li></ul><ul><li>Linguagens Interpretadas </li></ul><ul><li>“ Write once, Run Anywhere” </li></ul>
    9. 9. Linguagens Compiladas Scanner Parser Analisador Sintatico Analisador Semantico Otimizador Gerador de Codigo Tokens Parser Tree Representação Intermediaria Representação Intermediaria Codigo de Maquina Alvo
    10. 10. Linguagens Interpretadas INTERPRETADOR Código Fonte Dados OUTPUT
    11. 11. Porque?? Agenda JVM /DaVinci Onde ?Quais? Deep Dive Perguntas?
    12. 12. WORA?? <ul><li>Programas em Java, geralmente tem seu codigo fonte compilado para o formato intermediario .class </li></ul><ul><li>Programa pode ser composto de varios arquivos .class, empacotados em um arquivo .jar </li></ul><ul><li>Java possui uma linguagem intermediaria, chamada bytecode, que seria o formato das instruçoes executadas(interpretadas) pela JVM </li></ul><ul><li>Compilador JIT(Just in time) , em tempo de execução compila bytecodes para codigo nativo, aumentando a performance </li></ul><ul><li>JVM Sun Hotspot verifica partes do codigo que são muito executadas e compila estes para codigo nativo </li></ul><ul><li>JVM da Sun conta otimização adaptativa, ou seja, melhora com o tempo, sendo mais performatica em alguns casos, do que C++ e Assembly </li></ul>
    13. 13. JVM(JRE) CLASSLOADER JRE Intepretador de Bytecodes Independentes de Plataforma .class / .jar
    14. 14. JVM (JRE) <ul><li>Class Loader, ou carregador de classes </li></ul><ul><li>Interpretador de Bytecodes </li></ul><ul><li>Client/Server VM's </li></ul><ul><li>GC's como Mark/Sweep, G1 </li></ul><ul><li>Conjunto de Libs de execução </li></ul>
    15. 15. Outras Linguagens <ul><li>Ruby ==>JRuby </li></ul><ul><li>Pyhon ==>Jython </li></ul><ul><li>PHP==>Quercus </li></ul><ul><li>Javascript==>Rhino </li></ul><ul><li>Groovy </li></ul><ul><li>JavaFX </li></ul><ul><li>Clojure </li></ul><ul><li>Scala </li></ul>
    16. 16. Linguagens Dinamicas <ul><li>Recursos da plataforma Java </li></ul><ul><li>Vasto ecossistema de frameworks e bibliotecas opensource </li></ul><ul><li>Possibilidade de atacar diversos tipos de problemas com a ferramenta certa </li></ul><ul><li>Evitar soltar um parafuso com um alicate, ou matar moscas com bazuca! </li></ul>
    17. 17. Linguagens Dinamicas <ul><li>JVM nao possui suporte para linguagens dinamicamente tipadas devido as instruções da JVM serem tipadas e dificil modificação de classe e metodos dinamicamente </li></ul><ul><li>JSR-223 incorporado ao Mustang(Java 6) </li></ul><ul><li>JSR-292 possivelmente no Java7 </li></ul>
    18. 18. JSR-223 <ul><li>Acessar e controlar objetos Java em ambientes script </li></ul><ul><li>Criar conteudo para web com linguagens dinamicas(PHP, Rails,Grails,Django) </li></ul><ul><li>Integrar ambientes script com tecnologias Java </li></ul>
    19. 19. JSR-292 <ul><li>Adicionar instrução invokedynamic na JVM permitindo invocação de metodos sem a checagem de tipos </li></ul><ul><li>Solução para modificar classes e metodos em tempo de execução </li></ul><ul><li>Parte essencial do projeto DaVinci </li></ul>
    20. 20. DaVinci Virtual Machine <ul><li>Suporte arquitetural de primeira classe para linguagens , sem ser o Java </li></ul><ul><li>Ideia de rodar outras linguagens com performance comparavel a da linguagem Java </li></ul><ul><li>Ideia de coexistencia, tornando a JVM uma plataforma “universal” para todas as linguagens </li></ul><ul><li>Acabar com os painpoints dos desenvolvedores de linguagens, que poderão usar a JVM com facilidade </li></ul>
    21. 21. Porque?? Agenda JVM /DaVinci Conclusão Deep Dive Perguntas?
    22. 22. Python/Jython <ul><li>Jython trouxe o Python para JVM </li></ul><ul><li>Projeto Jython é liderado por Frank Wierzbicki, atualmente na SUN </li></ul><ul><li>Python foi originalmente criado por Guido Von Rossum </li></ul><ul><li>Python é facil de aprender mas ao mesmo tempo poderosa de usar </li></ul><ul><li>Jython pode acessar libs e frameworks escritos tanto em Python como em Java! </li></ul>
    23. 23. Python/Jython <ul><li>Linguagem que mais cresceu no ranking Tiobe( http://www.tiobe.com ) em 2007 </li></ul><ul><li>Elegante, Legivel, Robusta </li></ul><ul><li>Multiparadigma </li></ul><ul><li>Multidominio </li></ul>
    24. 24. Python/Jython <ul><li>Google utiliza em toda sua infraestrutura,podendo destacar Youtube, GoogleMaps e GAE </li></ul><ul><li>Crescente utilização para Web atraves de frameworks como Django, TurboGears </li></ul><ul><li>Utilizada no novo IPS do OpenSolaris </li></ul><ul><li>Utilizada para tarefas de admin no RedHat, Ubuntu </li></ul>
    25. 25. Python/Jython <ul><li>print “hello world” </li></ul><ul><li>def hello(name): </li></ul><ul><li>print “hello”, name </li></ul>
    26. 26. Python/Jython <ul><li>//Jython using Swing Jtable </li></ul><ul><li>from javax.swing import JTable </li></ul><ul><li>from javax.swing import JFrame </li></ul><ul><li>rowdata = [('bill', 'Bill Williams')] </li></ul><ul><li>colnames = ['user name', 'full name'] </li></ul><ul><li>table = JTable(rowdata, colnames) </li></ul><ul><li>frame = JFrame(&quot;Table&quot;) </li></ul><ul><li>frame.getContentPane().add( table ) </li></ul><ul><li>frame.size = 400, 300 </li></ul><ul><li>frame.visible = 1 </li></ul>
    27. 27. Javascript/Rhino/AJAX!? <ul><li>Linguagem script mais usada, em todos os browsers,Flash(ActionScript), Server-Side(Phobos, Rhino,JMaki,ASP) </li></ul><ul><li>Boa para codificar GUI's ex:JQuery, ExtJS </li></ul><ul><li>Multiparadigma contando com closures,herança baseada em prototipo </li></ul><ul><li>AJAX faz com que seja indispensavel nos dias de hoje </li></ul>
    28. 28. Javascript/Rhino <ul><li>Rhino+JSR223 integrados por padrão no Java6 </li></ul><ul><li>Javascript por ser mais flexivel, pode ser usada em uma serie de finalidades como regras de negocios que mudam frequentemente </li></ul><ul><li>Usado pelo Mozilla </li></ul>
    29. 29. Javascript/Rhino <ul><li>//Hello World Javascript on the JVM! </li></ul><ul><li>import javax.script.*; </li></ul><ul><li>public class EvalScript { </li></ul><ul><li>public static void main(String[] args) throws Exception { </li></ul><ul><li>// cria um gerente para o motor de scripts </li></ul><ul><li>ScriptEngineManager factory = new ScriptEngineManager(); </li></ul><ul><li>// cria o motor JavaScript como mostrado nos exemplos anteriores </li></ul><ul><li>ScriptEngine engine = factory.getEngineByName(&quot;js&quot;); </li></ul><ul><li>// interpreta o codigo Javascript </li></ul><ul><li>engine.eval(&quot;print('Hello World, Javascript on the JVM')&quot;); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
    30. 30. Ruby/JRuby <ul><li>Criado por Yukihiro Matsumoto ou “Matz” em 1995 </li></ul><ul><li>Mais poderosa que o Perl e mais OO que o Python, alem de coisa vinda do SmallTalk ,Eiffel e Lisp </li></ul><ul><li>Tipagem forte </li></ul><ul><li>Puramente OO (Tudo é um objeto) </li></ul><ul><li>Dinamica </li></ul><ul><li>Focada na simplicidade, produtividade e na felicidade par ao programador </li></ul>
    31. 31. Ruby/JRuby <ul><li>7.class => Fixnum </li></ul><ul><li>“hello”.length => 5 </li></ul><ul><li>3.times { |i| puts “Number #{i}” } </li></ul><ul><li>=> Number 1 </li></ul><ul><li>Number 2 </li></ul><ul><li>Number 3 </li></ul>
    32. 32. Ruby/JRuby <ul><li>Linguagem dinamicamente tipada, ou seja, sem necessidade de declaração de tipos de variaveis </li></ul><ul><li>DuckTyping=>”Se faz quack como um pato e anda como um pato, então é um pato” </li></ul><ul><li>Classe não são tipos, são objetos! </li></ul>
    33. 33. Ruby/JRuby <ul><li>Def fazer_quack(quacker) </li></ul><ul><li>quacker.quack </li></ul><ul><li>end </li></ul><ul><li>fazer_quack(Pato.new) </li></ul><ul><li>fazer_quack(Pinguin.new) </li></ul><ul><li>fazer_quack(Polvo.new) </li></ul>
    34. 34. Ruby/JRuby <ul><li>Açucares Sintaticos </li></ul><ul><li>Arrays: ['one', 1, Ein.new], %w(several words here) </li></ul><ul><li>Arrays Associativos (hashes): {'a' => 3, 'b' => 4} </li></ul><ul><li>Strings: ”foo”, %[abc foo “bar” is a string] </li></ul>
    35. 35. Ruby/JRuby <ul><li>Modules(Mixins) </li></ul><ul><li>Sem parentesis </li></ul><ul><li>Sem ponto e virgula </li></ul><ul><li>Chave ou do...end </li></ul><ul><li>Blocos ou Closures, internalizam codigo transacional, remove repetição </li></ul><ul><li>Metodos anonimos que podem ser invocados no final de outros metodos </li></ul>
    36. 36. Ruby/JRuby <ul><li>Projeto iniciado em 2001 </li></ul><ul><li>Charles Nutter, Thomas Enebo contratados pela SUN em 2005 </li></ul><ul><li>JRuby é a versão mais rapida, sendo de 2x-5x mais rapida que outras versões </li></ul><ul><li>Melhor scalabilidade com threads nativas </li></ul><ul><li>AOT/JIT </li></ul><ul><li>Boa forma de colocar o Ruby no ambiente corporativo </li></ul><ul><li>Integração com libs/frameworks Java e vice-versa </li></ul><ul><li>http://jruby.org/ </li></ul>
    37. 37. Ruby/JRuby <ul><li>require 'java' </li></ul><ul><li>import java.util.HashMap </li></ul><ul><li>h = HashMap.new </li></ul><ul><li>h[“foo”] = “bar” </li></ul><ul><li>h[“quux”] = “baz” </li></ul><ul><li>h.key_set.sort.each { |key| puts key } </li></ul>
    38. 38. Ruby/JRuby <ul><li>// Carregando o Ruby runtime
 </li></ul><ul><li>ScriptEngineManager factory =
 </li></ul><ul><li>new ScriptEngineManager();

 </li></ul><ul><li>ScriptEngine engine =
 </li></ul><ul><li>factory.getEngineByName(&quot;jruby&quot;);
 </li></ul><ul><li>
 </li></ul><ul><li>// Evaluate JRuby code from string.
 </li></ul><ul><li>try {
 </li></ul><ul><li>engine.eval(&quot;puts('Hello')&quot;);
 </li></ul><ul><li>} catch (ScriptException exception) { </li></ul><ul><li>
 exception.printStackTrace();
 </li></ul><ul><li>} </li></ul>
    39. 39. Ruby/JRuby <ul><li>Projeto Kenai </li></ul><ul><li>Mingle </li></ul><ul><li>Oracle Mix </li></ul><ul><li>MediaCast SUN </li></ul><ul><li>Slideshare </li></ul><ul><li>Twitter </li></ul><ul><li>Justin.TV </li></ul><ul><li>Milhares de outros projetos </li></ul>
    40. 40. Outras linguagens <ul><li>Kawa,Jatha , Groovy, BeanShell, </li></ul><ul><li>Pnuts, Jacl (TCL), JudoScript,Ioke </li></ul><ul><li>Jaskell, Sleep (Perl), Jelly, AWK, JEP, </li></ul><ul><li>Jexl, JST, SISC (Scheme), Athena </li></ul><ul><li>(Smaltalk), Jepp (Python native), </li></ul><ul><li>Quercus (PHP), BexScript, Jasconn </li></ul><ul><li>(AppleScript), JavaFX... </li></ul><ul><li>http://en.wikipedia.org/wiki/List_of_JVM_languages </li></ul><ul><li>http://www.is-research.de/info/vmlanguages/ </li></ul>
    41. 41. Groovy <ul><li>OO </li></ul><ul><li>Sintaxe bem parecida com Java </li></ul><ul><li>Executa codigo Java sem modificação </li></ul><ul><li>Sintaxe simples sem parentesis e pontovirgula </li></ul><ul><li>Listas, Mapas e Expressões Regulares </li></ul><ul><li>Integração Bi-Direcional </li></ul><ul><li>Closures, MOP </li></ul><ul><li>http://groovy.codehaus.org/Portuguese+Home </li></ul>
    42. 42. Clojure <ul><li>Criada por Rich Hickey em </li></ul><ul><li>Funcional e não OO </li></ul><ul><li>Funções de primeira classe! </li></ul><ul><li>STM </li></ul><ul><li>Suporte a Concorrencia/Multicore/Paralelismo </li></ul><ul><li>Dados Imutaveis </li></ul><ul><li>Integrada com Java </li></ul><ul><li>Dialeto Lisp </li></ul><ul><li>http://clojure.org/ </li></ul>
    43. 43. Clojure <ul><li>(defn hello [name] </li></ul><ul><li>(println &quot;Hello,&quot; name)) </li></ul><ul><li>(defn factorial-1 [number] </li></ul><ul><li>&quot;calcula fatorial de um numero, sem estourar a memoria&quot; </li></ul><ul><li>(loop [n number factorial 1] </li></ul><ul><li>(if (zero? n) </li></ul><ul><li>factorial </li></ul><ul><li>(recur (dec n) (* factorial n))))) </li></ul>
    44. 44. Scala <ul><li>Criada por Martin Odersky em 2001 </li></ul><ul><li>OO e Funcional </li></ul><ul><li>Linguagem de proposito geral </li></ul><ul><li>Alto e perfeito suporte a concorrencia/paralelismo </li></ul><ul><li>Tipagem Estatica </li></ul><ul><li>Postfix e Infix </li></ul><ul><li>http://www.scala-lang.org </li></ul>
    45. 45. Integração com outras tecnologias <ul><li>Netbeans foi eleita a melhor IDE para Jruby/Rails em 2008 </li></ul><ul><li>Ja possui suporte a Python com suporte a Jython/Django previsto para versão 7 </li></ul><ul><li>Suporte a desenvolvimento Groovy/Grails </li></ul><ul><li>Suporte a desenvolvimento Javascript </li></ul><ul><li>Versão exclusiva para JavaFX </li></ul><ul><li>Plugin para Clojure </li></ul>
    46. 46. Integração com outras tecnologias <ul><li>Possibilidade de deployment no Glassfish v2 atraves de um arquivo .war </li></ul><ul><li>Glassfish v3 possui integração com novos frameworks sendo o “container” perfeito, para Java e outras linguagens </li></ul><ul><li>Facilidade dada atraves do IPS do Glassfish v3 </li></ul>
    47. 47. Linguagens Dinamicas e Frameworks http://glassfish-scripting.dev.java.net
    48. 48. Porque?? Agenda JVM /DaVinci Conclusão Deep Dive Perguntas?
    49. 49. Conclusão <ul><li>Mercado em expansão </li></ul><ul><li>Tendencias como NoSQL, Cloud Computing estão impulsionando o desenvolvimento com novas linguagens </li></ul><ul><li>Novos paradigmas e problemas! </li></ul><ul><li>Como dito no livro “Pragmatic Programmer”, o bom programdor deve aprender varias linguagens, pelo menos uma por ano </li></ul><ul><li>Grandes nomes do TI como Sun, Microsoft, IBM e Oracle apostam nestas linguagens </li></ul>
    50. 50. Porque?? Agenda JVM /DaVinci Conclusão Deep Dive Perguntas?
    51. 51. Linguagens Dinamicas na JVM: o futuro do Java como plataforma! <ul><li>William Gouvea </li></ul>Obrigado pelo seu tempo! Sun OSUM Leader [email_address]

    ×