Como desenvolvedores web, uma coisa que não nos falta é o número de opções quando se trata de frameworks web, linguagens e tempos de execução. Somente o Google apoia oficialmente pelo menos cinco diferentes plataformas: JavaScript, GWT, Closure, e as duas recentes adicionadas em NaCl e Dart.
Por um lado, é fácil olhar para essa lista e questionar por que toda dissonância e competição. Afinal, todas essas equipes estão dentro da mesma empresa, então elas não podem simplesmente concordar em trabalhar juntas? No entanto, se você olhar para o alcance total desses projetos, uma perspectiva ligeiramente mais interessante surge: não é sobre a tentativa de encontrar o “verdadeiro caminho” para construir uma aplicação web moderna, ao contrário, intencionalmente ou não, o Google está financiando e fornecendo as ferramentas para cada lado do problema.
O Google Web Toolkit
Independentemente da tecnologia, o resultado final, no centro do diagrama, é o velho e simples HTML, o qual é executado pelo navegador. Ambas as tecnologias são algo em que o Google investiu muito: grande envolvimento com HTML5, e, claro, o próprio navegador Chrome.
Entretanto, a maioria dos aplicativos web hoje em dia não são apenas HTML estático; para adicionar interatividade, temos contado, historicamente, com JavaScript, que é onde o runtime do Chrome V8 vem focando em velocidade. “Rapidez é um recurso“, especialmente quando você tem aplicativos como o Gmail, que consistem em 443 mil linhas de JavaScript.
Desenvolvendo em JavaScript bruto, puro e simples pode ser divertido, mas a falta de ferramentas pode ser um problema em grande escala. O Closure é uma tentativa de resolver esse problema através da introdução de um linter/compilador dedicado, que também adiciona recursos como namespaces, verificação ortográfica, ocultação dados, uma “biblioteca padrão”, e uma série de outras extensões. Na verdade, você escreve JavaScript “com sabor Closure”, passa-o através do compilador, e o resultado é otimizado e reduzido em JavaScript. A equipe do Google+ tem profanado seu amor pelo Closure em inúmeras ocasiões, e eles são apenas uma das muitas equipes dentro do Google a usá-lo em produção.
Programação web estruturada com GWT e Dart
Mas você diz: eu amo o conjunto de ferramentas Eclipse, Java e toda a infraestrutura que vem com ele – se pudéssemos usar isso para construir nossos aplicativos web! Isso é o Google Web Toolkit (GWT). O SDK do GWT permite que você escreva todo seu aplicativo em Java e, em seguida, compile a fonte em JavaScript otimizado. Na verdade, é exatamente como o Google AdSense é construído. E, para um exemplo mais “divertido”, adicione um quadro como PlayN sobre GWT, e você terá AngryBirds no navegador!
No entanto, nem todo mundo é fã de Java. E se tivéssemos uma linguagem otimizada para “programação web estruturada”? Diga olá para Dart. A linguagem ainda está em preview tecnológico, mas o objetivo é ter uma abordagem abrangente para o problema: estruturada, linguagem familiar, bibliotecas comuns, modularidade e suporte para ferramenta built-in. Inicie o seu editor Dart (baseado no Eclipse), desenvolva e depure seu aplicativo, e o compilador Dart emitirá JavaScript otimizado quando você enviar o produto.
Vida além de JavaScript
Onde quer que haja um navegador, há um motor de JavaScript. Isso faz do JavaScript um alvo incrivelmente poderoso. No entanto, por que devemos fixar o futuro da web somente em JavaScript?
Dart, além da compilação de JavaScript, oferece o “Dart VM”, que irá executar o código diretamente em sua estação de trabalho ou servidor local. Na verdade, você pode até baixar e construir Dartium, que é um Chromium construído com um Dart VM built-in – sem JavaScript necessário!
<html> <body> <script type='application/dart'> void main() { HTMLElement element = document.getElementById('message'); element.innerHTML = 'Hello from Dart'; } </script> <div id='message'></div> </body> </html>
Mas se podemos ter Dart rodando nativamente no navegador, o que acontece com todas as outras linguagens? Isso é Native Client (NaCl), que permite que você execute o código compilado nativo diretamente no seu navegador! Pegue o seu fonte C/C++, compile-o com o conjunto de ferramentas NaCl, e você pode ter o seu motor físico, jogo, ou qualquer outro aplicativo intensivo da CPU rodando diretamente no navegador.
Além disso, há trabalhos em curso no Portable NaCl (PNaCl), que aceitará qualquer bytecode LLVM e o executará em NaCl – que, por sua vez, significa que podemos executar Python, Ruby, Lua, e dezenas de outras linguagens direto no browser . Para os curiosos, veja abaixo minha RubyConf 2011, na qual falo sobre esse assunto (slides):
A “Competição Colaborativa” do Google
É fácil olhar para todas as alternativas e ponderar o que Dart significa para GWT, ou Closure, como o NaCl afeta a imagem, e bom e velho JavaScript? Qual é o “verdadeiro caminho” para construir um aplicativo moderno web? A resposta curta é: pergunta errada, a resposta depende do seu contexto.
O próprio Google tem muitos produtos de alto perfil alimentados por cada uma das opções acima, e cada um tem seus pontos fortes e fracos, bem como um público para o qual é “a forma perfeita”. Em vez de tentar apostar em uma única solução, o Google está investindo sistematicamente em cada possível alternativa – o que chamam de coopetição – colaboração cooperativa.
***
Artigo traduzido pela Redação iMasters, com autorização do autor. Publicado originalmente em http://www.igvita.com/2012/01/05/google-web-toolkit-gwt-closure-nacl-dart-js/