Linguagens Dinamicas na JVM: o futuro do Java como plataforma! William Gouvea Sun OSUM Leader [email_address]
Porque?? Agenda JVM /DaVinci Onde ?Quais? Deep Dive Perguntas?
Porque? Paradigmas Usar o paradigma que mais se encaixa, para resolução do problema Dominios Especificos Linguagens que facilitam a criação/manuntençao de determinados tipos de aplicação Corrigir/Adicionar Ferramentas a linguagem Java Linguagem demora a adquirir certas caracteristicas usadas pelos programadores, devido a burocracia e grande utilização
Porque ? DSL's como SQL, Excel macros, trabalham diretamente com as regras de negocio do dominio da aplicação Todas as linguagens são 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 resolução de um problema de forma agil e pragmatica, com exceção dos Code Monkeys =P
Porque? A origem! Processador executa instruções de maquina sobre dados Dados vem ou da memoria externa(RAM) ou dos registradores Instruções são particulares para cada processador Basicamente , não importa a linguagem, o processador só trabalha com instruções e dados binarios!
Porque  a JVM? Linguagens necessitam de suporte de execução como GC, Gerencia de Memoria, etc “ 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 Portabilidade, Segurança, Performance Controle de Exceções nativo Suporte á Multithread nativo
Porque? A Origem Linguagens Compiladas Linguagens Interpretadas “ Write once, Run Anywhere”
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
Linguagens Interpretadas INTERPRETADOR Código Fonte Dados OUTPUT
Porque?? Agenda JVM /DaVinci Onde ?Quais? Deep Dive Perguntas?
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 instruçoes executadas(interpretadas) pela JVM Compilador JIT(Just in time) , em tempo de execução compila bytecodes para codigo nativo, aumentando a performance  JVM Sun Hotspot verifica partes do codigo que são muito executadas e compila estes para codigo nativo JVM da Sun conta otimização adaptativa, ou seja, melhora com o tempo, sendo mais performatica em alguns casos, do  que C++ e Assembly
JVM(JRE)  CLASSLOADER JRE Intepretador de Bytecodes Independentes 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 execução
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 instruções da JVM  serem tipadas e  dificil modificação 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 instrução  invokedynamic   na JVM permitindo invocação de metodos sem a checagem de tipos Solução para modificar classes e metodos em tempo de execução 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 poderão  usar a JVM com facilidade
Porque?? Agenda JVM /DaVinci Conclusão Deep Dive Perguntas?
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 utilização 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,herança baseada em prototipo AJAX faz com que seja indispensavel nos dias de hoje
Javascript/Rhino Rhino+JSR223 integrados por padrão 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 declaração de tipos de variaveis DuckTyping=>”Se faz quack como um pato e anda como um pato, então é um pato” Classe não são tipos, são objetos!
Ruby/JRuby Def fazer_quack(quacker) quacker.quack end fazer_quack(Pato.new) fazer_quack(Pinguin.new) fazer_quack(Polvo.new)
Ruby/JRuby Açucares 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 repetição 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 versão mais rapida, sendo de 2x-5x mais rapida que outras versões Melhor scalabilidade com threads nativas AOT/JIT Boa forma de colocar o Ruby no ambiente corporativo Integração 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 Twitter 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 modificação Sintaxe simples sem parentesis e pontovirgula Listas, Mapas e Expressões Regulares Integração Bi-Direcional Closures, MOP http://groovy.codehaus.org/Portuguese+Home
Clojure Criada por Rich Hickey em  Funcional  e não OO Funções 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
Integração 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 versão 7 Suporte a desenvolvimento Groovy/Grails Suporte a desenvolvimento Javascript Versão exclusiva para JavaFX Plugin para Clojure
Integração com outras tecnologias Possibilidade de deployment no Glassfish v2 atraves de um arquivo .war Glassfish v3 possui integração 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 Conclusão Deep Dive Perguntas?
Conclusão Mercado em expansão Tendencias como NoSQL, Cloud Computing estão 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 Conclusão Deep Dive Perguntas?
Linguagens Dinamicas na JVM: o futuro do Java como plataforma! William Gouvea Obrigado pelo seu tempo! Sun OSUM Leader [email_address]

Linguagens Dinamicas na JVM

  • 1.
    Linguagens Dinamicas naJVM: o futuro do Java como plataforma! William Gouvea Sun OSUM Leader [email_address]
  • 2.
    Porque?? Agenda JVM/DaVinci Onde ?Quais? Deep Dive Perguntas?
  • 3.
    Porque? Paradigmas Usaro paradigma que mais se encaixa, para resolução do problema Dominios Especificos Linguagens que facilitam a criação/manuntençao de determinados tipos de aplicação Corrigir/Adicionar Ferramentas a linguagem Java Linguagem demora a adquirir certas caracteristicas usadas pelos programadores, devido a burocracia e grande utilização
  • 4.
    Porque ? DSL'scomo SQL, Excel macros, trabalham diretamente com as regras de negocio do dominio da aplicação Todas as linguagens são 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
  • 5.
    Porque? “ Ocliente pode ter carros de todas as cores, portanto que eles sejam pretos”-Henry Ford 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
  • 6.
    Porque? A origem!Processador executa instruções de maquina sobre dados Dados vem ou da memoria externa(RAM) ou dos registradores Instruções são particulares para cada processador Basicamente , não importa a linguagem, o processador só trabalha com instruções e dados binarios!
  • 7.
    Porque aJVM? Linguagens necessitam de suporte de execução como GC, Gerencia de Memoria, etc “ 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 Portabilidade, Segurança, Performance Controle de Exceções nativo Suporte á Multithread nativo
  • 8.
    Porque? A OrigemLinguagens Compiladas Linguagens Interpretadas “ Write once, Run Anywhere”
  • 9.
    Linguagens Compiladas ScannerParser Analisador Sintatico Analisador Semantico Otimizador Gerador de Codigo Tokens Parser Tree Representação Intermediaria Representação Intermediaria Codigo de Maquina Alvo
  • 10.
    Linguagens Interpretadas INTERPRETADORCódigo Fonte Dados OUTPUT
  • 11.
    Porque?? Agenda JVM/DaVinci Onde ?Quais? Deep Dive Perguntas?
  • 12.
    WORA?? Programas emJava, 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 instruçoes executadas(interpretadas) pela JVM Compilador JIT(Just in time) , em tempo de execução compila bytecodes para codigo nativo, aumentando a performance JVM Sun Hotspot verifica partes do codigo que são muito executadas e compila estes para codigo nativo JVM da Sun conta otimização adaptativa, ou seja, melhora com o tempo, sendo mais performatica em alguns casos, do que C++ e Assembly
  • 13.
    JVM(JRE) CLASSLOADERJRE Intepretador de Bytecodes Independentes de Plataforma .class / .jar
  • 14.
    JVM (JRE) ClassLoader, ou carregador de classes Interpretador de Bytecodes Client/Server VM's GC's como Mark/Sweep, G1 Conjunto de Libs de execução
  • 15.
    Outras Linguagens Ruby==>JRuby Pyhon ==>Jython PHP==>Quercus Javascript==>Rhino Groovy JavaFX Clojure Scala
  • 16.
    Linguagens Dinamicas 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!
  • 17.
    Linguagens Dinamicas JVMnao possui suporte para linguagens dinamicamente tipadas devido as instruções da JVM serem tipadas e dificil modificação de classe e metodos dinamicamente JSR-223 incorporado ao Mustang(Java 6) JSR-292 possivelmente no Java7
  • 18.
    JSR-223 Acessar econtrolar objetos Java em ambientes script Criar conteudo para web com linguagens dinamicas(PHP, Rails,Grails,Django) Integrar ambientes script com tecnologias Java
  • 19.
    JSR-292 Adicionar instrução invokedynamic na JVM permitindo invocação de metodos sem a checagem de tipos Solução para modificar classes e metodos em tempo de execução Parte essencial do projeto DaVinci
  • 20.
    DaVinci Virtual MachineSuporte 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 poderão usar a JVM com facilidade
  • 21.
    Porque?? Agenda JVM/DaVinci Conclusão Deep Dive Perguntas?
  • 22.
    Python/Jython Jython trouxeo 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!
  • 23.
    Python/Jython Linguagem quemais cresceu no ranking Tiobe( http://www.tiobe.com ) em 2007 Elegante, Legivel, Robusta Multiparadigma Multidominio
  • 24.
    Python/Jython Google utilizaem toda sua infraestrutura,podendo destacar Youtube, GoogleMaps e GAE Crescente utilização para Web atraves de frameworks como Django, TurboGears Utilizada no novo IPS do OpenSolaris Utilizada para tarefas de admin no RedHat, Ubuntu
  • 25.
    Python/Jython print “helloworld” def hello(name): print “hello”, name
  • 26.
    Python/Jython //Jython usingSwing 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
  • 27.
    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 prototipo AJAX faz com que seja indispensavel nos dias de hoje
  • 28.
    Javascript/Rhino Rhino+JSR223 integradospor padrão 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
  • 29.
    Javascript/Rhino //Hello WorldJavascript 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')"); } }
  • 30.
    Ruby/JRuby Criado porYukihiro 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
  • 31.
    Ruby/JRuby 7.class => Fixnum “hello”.length => 5 3.times { |i| puts “Number #{i}” } => Number 1 Number 2 Number 3
  • 32.
    Ruby/JRuby Linguagem dinamicamentetipada, ou seja, sem necessidade de declaração de tipos de variaveis DuckTyping=>”Se faz quack como um pato e anda como um pato, então é um pato” Classe não são tipos, são objetos!
  • 33.
    Ruby/JRuby Def fazer_quack(quacker)quacker.quack end fazer_quack(Pato.new) fazer_quack(Pinguin.new) fazer_quack(Polvo.new)
  • 34.
    Ruby/JRuby Açucares SintaticosArrays: ['one', 1, Ein.new], %w(several words here) Arrays Associativos (hashes): {'a' => 3, 'b' => 4} Strings: ”foo”, %[abc foo “bar” is a string]
  • 35.
    Ruby/JRuby Modules(Mixins) Semparentesis Sem ponto e virgula Chave ou do...end Blocos ou Closures, internalizam codigo transacional, remove repetição Metodos anonimos que podem ser invocados no final de outros metodos
  • 36.
    Ruby/JRuby Projeto iniciadoem 2001 Charles Nutter, Thomas Enebo contratados pela SUN em 2005 JRuby é a versão mais rapida, sendo de 2x-5x mais rapida que outras versões Melhor scalabilidade com threads nativas AOT/JIT Boa forma de colocar o Ruby no ambiente corporativo Integração com libs/frameworks Java e vice-versa http://jruby.org/
  • 37.
    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 }
  • 38.
    Ruby/JRuby // Carregandoo 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();
 }
  • 39.
    Ruby/JRuby Projeto KenaiMingle Oracle Mix MediaCast SUN Slideshare Twitter Justin.TV Milhares de outros projetos
  • 40.
    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/
  • 41.
    Groovy OO Sintaxebem parecida com Java Executa codigo Java sem modificação Sintaxe simples sem parentesis e pontovirgula Listas, Mapas e Expressões Regulares Integração Bi-Direcional Closures, MOP http://groovy.codehaus.org/Portuguese+Home
  • 42.
    Clojure Criada porRich Hickey em Funcional e não OO Funções de primeira classe! STM Suporte a Concorrencia/Multicore/Paralelismo Dados Imutaveis Integrada com Java Dialeto Lisp http://clojure.org/
  • 43.
    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)))))
  • 44.
    Scala Criada porMartin 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
  • 45.
    Integração com outrastecnologias Netbeans foi eleita a melhor IDE para Jruby/Rails em 2008 Ja possui suporte a Python com suporte a Jython/Django previsto para versão 7 Suporte a desenvolvimento Groovy/Grails Suporte a desenvolvimento Javascript Versão exclusiva para JavaFX Plugin para Clojure
  • 46.
    Integração com outrastecnologias Possibilidade de deployment no Glassfish v2 atraves de um arquivo .war Glassfish v3 possui integração com novos frameworks sendo o “container” perfeito, para Java e outras linguagens Facilidade dada atraves do IPS do Glassfish v3
  • 47.
    Linguagens Dinamicas eFrameworks http://glassfish-scripting.dev.java.net
  • 48.
    Porque?? Agenda JVM/DaVinci Conclusão Deep Dive Perguntas?
  • 49.
    Conclusão Mercado emexpansão Tendencias como NoSQL, Cloud Computing estão 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
  • 50.
    Porque?? Agenda JVM/DaVinci Conclusão Deep Dive Perguntas?
  • 51.
    Linguagens Dinamicas naJVM: o futuro do Java como plataforma! William Gouvea Obrigado pelo seu tempo! Sun OSUM Leader [email_address]

Notas do Editor

  • #3 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.)
  • #12 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.)
  • #22 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.)
  • #49 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.)
  • #51 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.)