linguagens dinamicas na jvm

Download Linguagens Dinamicas na JVM

If you can't read please download the document

Upload: william-gouvea

Post on 16-Apr-2017

1.934 views

Category:

Technology


0 download

TRANSCRIPT

Linguagens Dinamicas na JVM: o futuro do Java como plataforma!

William Gouvea

Sun OSUM [email protected]

Porque??

Agenda

JVM /DaVinci

Onde ?Quais?

Deep Dive

Perguntas?

Slide 1: title and presenter's nameSlide 2: topic intro - what product/technology isSlide 3: topic intro - who is the target market (be very as specific as possible: e.g. geo, developer type, etc.)Slide 4: demoSlide 5: certificationSlide 6: call-to-actionSlide 7: resources: (URLs, where to go/who to call for more information, etc.)

Porque?

Paradigmas

Usar o paradigma que mais se encaixa, para resoluo do problema

Dominios Especificos

Linguagens que facilitam a criao/manuntenao de determinados tipos de aplicao

Corrigir/Adicionar Ferramentas a linguagem Java

Linguagem demora a adquirir certas caracteristicas usadas pelos programadores, devido a burocracia e grande utilizao

Porque ?

DSL's como SQL, Excel macros, trabalham diretamente com as regras de negocio do dominio da aplicao

Todas as linguagens so 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 resoluo de um problema de forma agil e pragmatica, com exceo dos Code Monkeys =P

Porque? A origem!

Processador executa instrues de maquina sobre dados

Dados vem ou da memoria externa(RAM) ou dos registradores

Instrues so particulares para cada processador

Basicamente , no importa a linguagem, o processador s trabalha com instrues e dados binarios!

Porque a JVM?

Linguagens necessitam de suporte de execuo como GC, Gerencia de Memoria, etc

Todo problema em Cincia da Computao pode ser resolvido com uma camada de abstrao- Butler Lampson , VM essa camada, abstraindo o hardware

Portabilidade, Segurana, Performance

Controle de Excees nativo

Suporte Multithread nativo

Porque? A Origem

Linguagens Compiladas

Linguagens Interpretadas

Write once, Run Anywhere

Linguagens Compiladas

ScannerParserAnalisadorSintaticoAnalisadorSemanticoOtimizadorGeradorde CodigoTokensParser TreeRepresentaoIntermediariaRepresentaoIntermediariaCodigode MaquinaAlvo

Linguagens Interpretadas

INTERPRETADORCdigo FonteDados

OUTPUT

Porque??

Agenda

JVM /DaVinci

Onde ?Quais?

Deep Dive

Perguntas?

Slide 1: title and presenter's nameSlide 2: topic intro - what product/technology isSlide 3: topic intro - who is the target market (be very as specific as possible: e.g. geo, developer type, etc.)Slide 4: demoSlide 5: certificationSlide 6: call-to-actionSlide 7: resources: (URLs, where to go/who to call for more information, etc.)

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 instruoes executadas(interpretadas) pela JVM

Compilador JIT(Just in time) , em tempo de execuo compila bytecodes para codigo nativo, aumentando a performance

JVM Sun Hotspot verifica partes do codigo que so muito executadas e compila estes para codigo nativo

JVM da Sun conta otimizao adaptativa, ou seja, melhora com o tempo, sendo mais performatica em alguns casos, do que C++ e Assembly

JVM(JRE)

CLASSLOADERJRE

Intepretador de BytecodesIndependentes 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 execuo

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 instrues da JVM serem tipadas e dificil modificao 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 instruo invokedynamic na JVM permitindo invocao de metodos sem a checagem de tipos

Soluo para modificar classes e metodos em tempo de execuo

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 podero usar a JVM com facilidade

Porque??

Agenda

JVM /DaVinci

Concluso

Deep Dive

Perguntas?

Slide 1: title and presenter's nameSlide 2: topic intro - what product/technology isSlide 3: topic intro - who is the target market (be very as specific as possible: e.g. geo, developer type, etc.)Slide 4: demoSlide 5: certificationSlide 6: call-to-actionSlide 7: resources: (URLs, where to go/who to call for more information, etc.)

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 utilizao 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,herana baseada em prototipo

AJAX faz com que seja indispensavel nos dias de hoje

Javascript/Rhino

Rhino+JSR223 integrados por padro 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 declarao de tipos de variaveis

DuckTyping=>Se faz quack como um pato e anda como um pato, ento um pato

Classe no so tipos, so objetos!

Ruby/JRuby

Def fazer_quack(quacker)

quacker.quack

end

fazer_quack(Pato.new)

fazer_quack(Pinguin.new)

fazer_quack(Polvo.new)

Ruby/JRuby

Aucares 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 repetio

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 verso mais rapida, sendo de 2x-5x mais rapida que outras verses

Melhor scalabilidade com threads nativas

AOT/JIT

Boa forma de colocar o Ruby no ambiente corporativo

Integrao 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 modificao

Sintaxe simples sem parentesis e pontovirgula

Listas, Mapas e Expresses Regulares

Integrao Bi-Direcional

Closures, MOP

http://groovy.codehaus.org/Portuguese+Home

Clojure

Criada por Rich Hickey em

Funcional e no OO

Funes 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

Integrao 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 verso 7

Suporte a desenvolvimento Groovy/Grails

Suporte a desenvolvimento Javascript

Verso exclusiva para JavaFX

Plugin para Clojure

Integrao com outras tecnologias

Possibilidade de deployment no Glassfish v2 atraves de um arquivo .war

Glassfish v3 possui integrao 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

Concluso

Deep Dive

Perguntas?

Slide 1: title and presenter's nameSlide 2: topic intro - what product/technology isSlide 3: topic intro - who is the target market (be very as specific as possible: e.g. geo, developer type, etc.)Slide 4: demoSlide 5: certificationSlide 6: call-to-actionSlide 7: resources: (URLs, where to go/who to call for more information, etc.)

Concluso

Mercado em expanso

Tendencias como NoSQL, Cloud Computing esto 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

Concluso

Deep Dive

Perguntas?

Slide 1: title and presenter's nameSlide 2: topic intro - what product/technology isSlide 3: topic intro - who is the target market (be very as specific as possible: e.g. geo, developer type, etc.)Slide 4: demoSlide 5: certificationSlide 6: call-to-actionSlide 7: resources: (URLs, where to go/who to call for more information, etc.)

Linguagens Dinamicas na JVM: o futuro do Java como plataforma!

William Gouvea

Sun OSUM [email protected]

Obrigado pelo seu tempo!

Click to edit the title text format

Presenters Name

Presenters Title

Presenters Company

Click to edit the notes format

Page

Click to edit the title text format

Click to edit the outline text format

Second Outline Level

GlassFish: The Best Open Source Application Server

Page