SlideShare uma empresa Scribd logo
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]

Mais conteúdo relacionado

Mais procurados

Conhecendo Java
Conhecendo JavaConhecendo Java
Conhecendo Java
Rafael Carneiro
 
Apostila java completo
Apostila java completoApostila java completo
Apostila java completo
Sliedesharessbarbosa
 
Introdução à Programação em Java - Aula 1 (PT-PT)
Introdução à Programação em Java - Aula 1 (PT-PT)Introdução à Programação em Java - Aula 1 (PT-PT)
Introdução à Programação em Java - Aula 1 (PT-PT)
Manoel Campos da Silva Filho
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com Java
Álvaro Farias Pinheiro
 
Como Construir um Compilador cap-1
Como Construir um Compilador cap-1Como Construir um Compilador cap-1
Como Construir um Compilador cap-1
Maellson Marques
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Rails
ismaelstahelin
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
Daniel Alves
 
Java acsp
Java acspJava acsp
Java acsp
Eduardo Bregaida
 
Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)
Luis Borges Gouveia
 
Programação em java linguagem, ap is, boas práticas e eclipse
Programação em java   linguagem, ap is, boas práticas e eclipseProgramação em java   linguagem, ap is, boas práticas e eclipse
Programação em java linguagem, ap is, boas práticas e eclipse
Filipe Bezerra Sousa
 
1213 java
1213 java1213 java
1213 java
Lucas Cruz
 
Java Scripting - Linguagens Interpretadas pelo Java
Java Scripting - Linguagens Interpretadas pelo JavaJava Scripting - Linguagens Interpretadas pelo Java
Java Scripting - Linguagens Interpretadas pelo Java
Paulo César M Jeveaux
 
Mini Curso Python
Mini Curso PythonMini Curso Python
Mini Curso Python
armandoroque
 
Grupo de estudo - Kotlin
Grupo de estudo - KotlinGrupo de estudo - Kotlin
Grupo de estudo - Kotlin
André Justi
 
Livro - código limpo caps (3,4) (clean code)
Livro - código limpo caps (3,4) (clean code)Livro - código limpo caps (3,4) (clean code)
Livro - código limpo caps (3,4) (clean code)
André Justi
 
Introdução ao Java
Introdução ao JavaIntrodução ao Java
Introdução ao Java
Eduardo Carvalho
 

Mais procurados (16)

Conhecendo Java
Conhecendo JavaConhecendo Java
Conhecendo Java
 
Apostila java completo
Apostila java completoApostila java completo
Apostila java completo
 
Introdução à Programação em Java - Aula 1 (PT-PT)
Introdução à Programação em Java - Aula 1 (PT-PT)Introdução à Programação em Java - Aula 1 (PT-PT)
Introdução à Programação em Java - Aula 1 (PT-PT)
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com Java
 
Como Construir um Compilador cap-1
Como Construir um Compilador cap-1Como Construir um Compilador cap-1
Como Construir um Compilador cap-1
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Rails
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
 
Java acsp
Java acspJava acsp
Java acsp
 
Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)
 
Programação em java linguagem, ap is, boas práticas e eclipse
Programação em java   linguagem, ap is, boas práticas e eclipseProgramação em java   linguagem, ap is, boas práticas e eclipse
Programação em java linguagem, ap is, boas práticas e eclipse
 
1213 java
1213 java1213 java
1213 java
 
Java Scripting - Linguagens Interpretadas pelo Java
Java Scripting - Linguagens Interpretadas pelo JavaJava Scripting - Linguagens Interpretadas pelo Java
Java Scripting - Linguagens Interpretadas pelo Java
 
Mini Curso Python
Mini Curso PythonMini Curso Python
Mini Curso Python
 
Grupo de estudo - Kotlin
Grupo de estudo - KotlinGrupo de estudo - Kotlin
Grupo de estudo - Kotlin
 
Livro - código limpo caps (3,4) (clean code)
Livro - código limpo caps (3,4) (clean code)Livro - código limpo caps (3,4) (clean code)
Livro - código limpo caps (3,4) (clean code)
 
Introdução ao Java
Introdução ao JavaIntrodução ao Java
Introdução ao Java
 

Destaque

QCon São Paulo 2010 - JRuby
QCon São Paulo 2010 - JRubyQCon São Paulo 2010 - JRuby
QCon São Paulo 2010 - JRuby
Charles Nutter
 
Programação GUI com jRuby
Programação GUI com jRubyProgramação GUI com jRuby
Programação GUI com jRuby
Frevo on Rails
 
Jasmine - Sinon - BrazilJS
Jasmine - Sinon - BrazilJSJasmine - Sinon - BrazilJS
Jasmine - Sinon - BrazilJS
Sergio Azevedo
 
Introdução a ruby
Introdução a rubyIntrodução a ruby
Introdução a ruby
Wende Mendes
 
WebApps minimalistas com Sinatra
WebApps minimalistas com SinatraWebApps minimalistas com Sinatra
WebApps minimalistas com Sinatra
Frevo on Rails
 
Jruby - Ruby em Ambientes 100% Java
Jruby - Ruby em Ambientes 100% JavaJruby - Ruby em Ambientes 100% Java
Jruby - Ruby em Ambientes 100% Java
Sergio Azevedo
 
Rest Teoria E Pratica
Rest Teoria E PraticaRest Teoria E Pratica
Rest Teoria E Pratica
Sergio Azevedo
 

Destaque (7)

QCon São Paulo 2010 - JRuby
QCon São Paulo 2010 - JRubyQCon São Paulo 2010 - JRuby
QCon São Paulo 2010 - JRuby
 
Programação GUI com jRuby
Programação GUI com jRubyProgramação GUI com jRuby
Programação GUI com jRuby
 
Jasmine - Sinon - BrazilJS
Jasmine - Sinon - BrazilJSJasmine - Sinon - BrazilJS
Jasmine - Sinon - BrazilJS
 
Introdução a ruby
Introdução a rubyIntrodução a ruby
Introdução a ruby
 
WebApps minimalistas com Sinatra
WebApps minimalistas com SinatraWebApps minimalistas com Sinatra
WebApps minimalistas com Sinatra
 
Jruby - Ruby em Ambientes 100% Java
Jruby - Ruby em Ambientes 100% JavaJruby - Ruby em Ambientes 100% Java
Jruby - Ruby em Ambientes 100% Java
 
Rest Teoria E Pratica
Rest Teoria E PraticaRest Teoria E Pratica
Rest Teoria E Pratica
 

Semelhante a Linguagens Dinamicas na JVM

Java virtual machine quantas linguas fala a jvm2
Java virtual machine   quantas linguas fala a jvm2Java virtual machine   quantas linguas fala a jvm2
Java virtual machine quantas linguas fala a jvm2
Josenaldo de Oliveira Matos Filho
 
Java: Muito mais que uma linguagem!
Java: Muito mais que uma linguagem!Java: Muito mais que uma linguagem!
Java: Muito mais que uma linguagem!
Aécio Costa
 
Conhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java PlatformConhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java Platform
Milfont Consulting
 
Inovando na Plataforma Java
Inovando na Plataforma JavaInovando na Plataforma Java
Inovando na Plataforma Java
Wanderson Oliveira
 
Inovando na plataforma Java
Inovando na plataforma JavaInovando na plataforma Java
Inovando na plataforma Java
Eteg
 
Introducao logica2
Introducao logica2Introducao logica2
Introducao logica2
Denilton Darold
 
1.introducao java
1.introducao java1.introducao java
1.introducao java
Kievnny Mendonca
 
Produtividade em Java com Grails
Produtividade em Java com GrailsProdutividade em Java com Grails
Produtividade em Java com Grails
Wanderson Oliveira
 
Java 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral DetalhadoJava 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral Detalhado
Regis Magalhães
 
Java 01 Java Visao Geral
Java 01 Java Visao GeralJava 01 Java Visao Geral
Java 01 Java Visao Geral
Regis Magalhães
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java Fundamentos
Wilson Lima
 
Jugday - Java Básico
Jugday - Java BásicoJugday - Java Básico
Jugday - Java Básico
Paloma Costa
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
CASSIANE SILVA
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
Patricia Marques
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
rollbackpt
 
Apresentação java
Apresentação javaApresentação java
Apresentação java
munosai
 
Java Seminar
Java SeminarJava Seminar
Java Seminar
armeniocardoso
 
01 introducao ao java
01   introducao ao java01   introducao ao java
01 introducao ao java
Artur Todeschini
 
JAVA: Muito mais que uma linguagem
JAVA: Muito mais que uma linguagemJAVA: Muito mais que uma linguagem
JAVA: Muito mais que uma linguagem
liverig
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
PrinceGuru MS
 

Semelhante a Linguagens Dinamicas na JVM (20)

Java virtual machine quantas linguas fala a jvm2
Java virtual machine   quantas linguas fala a jvm2Java virtual machine   quantas linguas fala a jvm2
Java virtual machine quantas linguas fala a jvm2
 
Java: Muito mais que uma linguagem!
Java: Muito mais que uma linguagem!Java: Muito mais que uma linguagem!
Java: Muito mais que uma linguagem!
 
Conhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java PlatformConhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java Platform
 
Inovando na Plataforma Java
Inovando na Plataforma JavaInovando na Plataforma Java
Inovando na Plataforma Java
 
Inovando na plataforma Java
Inovando na plataforma JavaInovando na plataforma Java
Inovando na plataforma Java
 
Introducao logica2
Introducao logica2Introducao logica2
Introducao logica2
 
1.introducao java
1.introducao java1.introducao java
1.introducao java
 
Produtividade em Java com Grails
Produtividade em Java com GrailsProdutividade em Java com Grails
Produtividade em Java com Grails
 
Java 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral DetalhadoJava 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral Detalhado
 
Java 01 Java Visao Geral
Java 01 Java Visao GeralJava 01 Java Visao Geral
Java 01 Java Visao Geral
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java Fundamentos
 
Jugday - Java Básico
Jugday - Java BásicoJugday - Java Básico
Jugday - Java Básico
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
 
Apresentação java
Apresentação javaApresentação java
Apresentação java
 
Java Seminar
Java SeminarJava Seminar
Java Seminar
 
01 introducao ao java
01   introducao ao java01   introducao ao java
01 introducao ao java
 
JAVA: Muito mais que uma linguagem
JAVA: Muito mais que uma linguagemJAVA: Muito mais que uma linguagem
JAVA: Muito mais que uma linguagem
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 

Linguagens Dinamicas na JVM

  • 1. Linguagens Dinamicas na JVM: 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 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
  • 4. 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
  • 5. 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
  • 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 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
  • 8. Porque? A Origem Linguagens Compiladas Linguagens Interpretadas “ Write once, Run Anywhere”
  • 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. Linguagens Interpretadas INTERPRETADOR Código Fonte Dados OUTPUT
  • 11. Porque?? Agenda JVM /DaVinci Onde ?Quais? Deep Dive Perguntas?
  • 12. 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
  • 13. JVM(JRE) CLASSLOADER JRE Intepretador de Bytecodes Independentes de Plataforma .class / .jar
  • 14. 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
  • 15. Outras Linguagens Ruby ==>JRuby Pyhon ==>Jython PHP==>Quercus Javascript==>Rhino Groovy JavaFX Clojure Scala
  • 16. 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!
  • 17. 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
  • 18. 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
  • 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 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
  • 21. Porque?? Agenda JVM /DaVinci Conclusão Deep Dive Perguntas?
  • 22. 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!
  • 23. Python/Jython Linguagem que mais cresceu no ranking Tiobe( http://www.tiobe.com ) em 2007 Elegante, Legivel, Robusta Multiparadigma Multidominio
  • 24. 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
  • 25. Python/Jython print “hello world” def hello(name): print “hello”, name
  • 26. 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
  • 27. 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
  • 28. 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
  • 29. 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')"); } }
  • 30. 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
  • 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 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!
  • 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 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]
  • 35. 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
  • 36. 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/
  • 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 // 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();
 }
  • 39. Ruby/JRuby Projeto Kenai Mingle 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 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
  • 42. 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/
  • 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 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
  • 45. 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
  • 46. 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
  • 47. Linguagens Dinamicas e Frameworks http://glassfish-scripting.dev.java.net
  • 48. Porque?? Agenda JVM /DaVinci Conclusão Deep Dive Perguntas?
  • 49. 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
  • 50. Porque?? Agenda JVM /DaVinci Conclusão Deep Dive Perguntas?
  • 51. Linguagens Dinamicas na JVM: o futuro do Java como plataforma! William Gouvea Obrigado pelo seu tempo! Sun OSUM Leader [email_address]

Notas do Editor

  1. 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.)
  2. 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.)
  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.)
  4. 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.)
  5. 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.)