Esse artigo faz parte da revista Java Magazine edição 63. Clique aqui para ler todos os artigos desta edição

AN style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: red; FONT-FAMILY: Verdana; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">

PAN>

viáveis para estas linguagens. O artigo pretende guiar o leitor por estas novidades, explorando invocações tecnológicas por trás delas, e tentando prever o que virá.

 

Em que situação o tema é útil:

Todo desenvolvedor Java precisa ser bastante eclético hoje em dia, conhecendo uma diversidade de tecnologias que são utilizadas por muitas aplicações. Mesmo quem não é especializado no front-end precisa ter pelo menos um conhecimento razoável de tecnologias web em geral, como HTML e Javascript. E quem trabalha com GUIs, além de conhecer em profundidade estas tecnologias, ainda que prefira o Java sempre deve estar de “olho” em concorrentes como o Flash, Silverlight etc.

Além disso, é cada vez maior o sucesso da plataforma Java em conviver com linguagens alternativas, como Ruby, Python, Groovy, Javascript e outras que virão. Para quem curte as linguagens “dinâmicas”, é importante acompanhar os avanços na sua implementação. Em alguns casos, estes avanços podem ser incorporados também pela plataforma Java, para benefício da linguagem Java ou de outras linguagens que suportam compilação para bytecode Java.

 

A plataforma e a linguagem Java completaram 12 anos em 2008. Mesmo a “geração Java2” (J2SE / J2EE / J2ME), instituída em 1999, já vai para a primeira década. E devido ao seu enorme sucesso comercial, esta plataforma reuniu uma intensa atividade de pesquisa e implementação – provavelmente, sem competição em qualquer outra linguagem ou plataforma individual.

Em diversas edições da Java Magazine, esta coluna se ocupou de expor ao leitor boa parte da tecnologia por trás da plataforma Java, com especial foco na JVM (Java Virtual Machine) e APIs específicas para desempenho. Falamos muito sobre compiladores Just-In-Time, Garbage Collectors, concorrência, e suporte a dispositivos limitados. Mais recentemente, perspectivas como suporte a linguagens dinâmicas ou capacidades real-time.

A briga esquentou de novo

Uma impressão que pode ficar é que a tecnologia do Java já sendo extremamente madura, não há mais mudanças revolucionárias no horizonte. Nos últimos dois ou três anos, parecia que era isso mesmo. Embora o Java ainda enfrentasse dificuldade em nichos específicos, como aplicações desktop ou real-time, aparentemente era só uma questão de tempo para sua tecnologia ou APIs serem mais desenvolvidas nessa direção e assegurar à plataforma Java, por um bom tempo, um trono nunca antes ocupado por outra plataforma integral.

Por “plataforma integral” quero dizer um pacote de linguagem + compilador + runtimes + APIs – como nas plataformas Java (ME, SE e EE). Para comparar com uma linguagem como C/C++, seria preciso complementá-la com um pacote como: Compilador Microsoft + Windows SDK + vários serviços do Windows (COM, MSXML, etc.) Ou no Linux, por componentes totalmente diferentes: POSIX, GCC, GTK, etc. Devido à falta de padronização de sistemas operacionais, toolkits de GUI e outros, a maioria dos concorrentes, por definição, nunca puderam ocupar a posição do Java.

No entanto, o tempo não pára. O Java teve o seu período de domínio inquestionado e ascensão ininterrupta, mas esta calmaria chegou ao fim com uma verdadeira avalanche de concorrentes. Podemos enumerá-los:

·       O tradicional stack “LAMP” cresceu e apareceu numa época de Web 2.0, maturidade de componentes como o Linux, e popularização do software livre numa geração business-friendly;

·       Renovado interesse também em linguagens dinamicamente tipadas, como Python e Ruby, antigamente reservadas para scripts simples, mas hoje conquistando espaço como linguagens primárias para desenvolvimento de aplicações;

·       A plataforma .NET, que apesar de fraco ritmo inicial de adoção (e fracassos como o projeto LongHorn/Vista – que originalmente faria uso maciço da .NET), é promovida e aperfeiçoada por uma incansável Microsoft, e hoje constitui um sério concorrente;

·       A plataforma web: HTML, Javascript e recentemente AJAX, com vantagens como portabilidade, ubiqüidade do browser e a execução centralizada. Aliás, a web realiza a visão dos NCs (Network Computers), promovida nos anos 90 por empresas como Oracle e Sun e considerada um fiasco. Mas que fiasco, agora que centenas de milhões de pessoas passam horas por dia utilizando aplicações centralizadas através de um “terminal burro” como um browser[1]?

·       As plataformas RIA, do Flash ao Air, Silverlight e JavaFX. Mais recentemente, uma fusão (ou confusão?) deste item com o anterior, com o reaquecimento da “guerra dos browsers” – novos browsers “envenenados” para competir com as novas soluções RIA;

·       Plataformas móveis com funcionalidades que começam a competir com PCs: PDAs e smartphones em geral, fenômenos de mercado como o iPhone e promessas como o Android.

 

Estes concorrentes não são apenas novidades de marketing (ex.: iPhone) ou questão de gosto por sintaxes ou frameworks específicos (ex.: Ruby on Rails). Existem inovações tecnológicas por trás de cada item da lista acima. Para dar só um exemplo, a viabilidade de linguagens dinamicamente tipadas deve muito ao amadurecimento dos runtimes e compiladores (mas também, reconheça-se, devido à Lei de Moore – CPUs tão rápidas que mesmo a interpretação é muitas vezes aceitável).

Neste artigo, vamos navegar por esta verdadeira selva de tecnologias, linguagens, plataformas e modelos de desenvolvimento. Vamos examinar o que está acontecendo, investigar perspectivas para o desenvolvimento de software em geral, e (é claro) para a plataforma Java em particular. Como adepto do Java, meu principal interesse – que acredito ser partilhado pelo leitor – é ver se a comunidade Java está “esperta”, ou se está dormindo no ponto e esperando para ter o tapete puxado debaixo de seus pés por algum concorrente inovador.

A Nova Onda do Compilador

Vamos começar pelo que interessa (bem, pelo menos me interessa). Algumas notícias recentes devem ter chamado a atenção do leitor antenado com a tecnologia de linguagens de programação:

·       A disponibilização, pela Adobe, do Flash 9, cuja VM de ActionScript tem desempenho muito superior ao tradicional, sendo pedra fundamental da nova plataforma Air;

·       O lançamento, pelo Google, do novo browser Chrome, cuja nova VM de Javascript chamada V8 dá uma “surra” em todos os browsers anteriores e talvez elimine a necessidade de qualquer plug-in RIA para construções de aplicações web complexas e sofisticadas;

·       A resposta do time do Mozilla: O Firefox 3.1 também terá uma nova VM Javascript avançada, chamada TraceMonkey, tão boa quanto o V8 ou talvez até superior;

·       Novos runtimes para linguagens dinâmicas, como o YARV (Ruby), JRuby e Jython (para a JVM) e IronPython (para .NET), exibindo desempenho até então inédito para tais linguagens.

 

O que está acontecendo aqui – o que houve com a regra “linguagens dinâmicas são lentas”? Existe alguma nova tecnologia revolucionária, e em caso positivo, podemos usá-la no Java? Como veremos, ambas as perguntas têm resposta positiva.

Tracing

A novidade mais importante desta década na área da compilação de linguagens, especialmente compilação Just-In-Time (JIT) exigida por plataformas com código portável, é uma nova técnica chamada Tracing. Vamos introduzi-la aqui.

...

Quer ler esse conteúdo completo? Tenha acesso completo