JavaScript no GNOME
Com o lançamento do GNOME 2.28 daqui a um mês, a plataforma de desenvolvimento ganhou mais um binding: JavaScript. A biblioteca Seed usa o interpretador JavaScriptCore, do Webkit, que se tornará acessível aos aplicativos do GNOME (e outros em GTK+) através do WebKitGTK+, também adicionado ao GNOME 2.28 na qualidade de dependência externa. Como o JavaScript é uma linguagem de programação incrivelmente popular, e agora muito bem adaptada à plataforma, espera-se que a novidade traga muitos frutos. Na verdade, já existem aplicativos e extensões sendo escritos para GNOME em JavaScript, e existe pelo menos uma empresa startup desenvolvendo seus produtos com essa combinação.
Algumas pessoas vão estranhar eu ter podido escrever esse artigo. Na verdade, há muito tempo quero escrevê-lo, e ele estava semipronto havia uma semana. Agradeço a Lucas Rocha pela revisão!
A plataforma de desenvolvimento do GNOME é tradicionalmente amigável a bindings, permitindo que o programador escolha a linguagem de programação mais adequada ao seu projeto. O problema é que manter essas bindings gera muita duplicação de metadados, e às vezes a linguagem escolhida ainda não tem acesso a todos os recursos presentes nas bibliotecas escritas em C. O GObject, que é responsável pelas características orientadas a objeto da plataforma GNOME e até do próprio GTK+, recebeu a capacidade de introspecção, o que significa que a partir de metadados de código C será possível gerar automaticamente os metadados necessários para as bindings de outras linguagens. Só para traçar um paralelo, a capacidade de introspecção do XPCOM é responsável pela facilidade de desenvolvimento de complementos da plataforma Mozilla, e os complementos do Firefox são sem dúvida alguma uma das razões do sucesso do navegador. Outros exemplos de extensibilidade através de linguagens interpretadas são o Emacs, com o Scheme Lisp, e alguns jogos usando Lua.
A linguagem JavaScript dispõe de uma plataforma própria mínima, ao contrário do Python e sua filosofia de “pilhas incluídas”. A vantagem é que os scripts usam simplesmente a plataforma em que está sendo executado o interpretador (por exemplo, a do GNOME), resultando em menos impacto na memória e maior desempenho. A velocidade de execução de um aplicativo em JavaScript depende principalmente da velocidade da plataforma, e não do interpretador. Além disso, o JavaScript tem diversas características de uma linhagem de programação moderna, como orientação a objeto (usando protótipos em vez de classes).
A sintaxe está em constante evolução, o que tem suas vantagens (recursos emprestados do Python, como iteradores e compreensão de lista — list comprehension), mas ao mesmo tempo gera incompatibilidades entre as implementações. Na verdade, existem duas bibliotecas para incorporação de JavaScript ao GNOME: Seed e GJS. Os projetos foram iniciados em paralelo, e usam tecnologias diferentes. Enquanto o primeiro depende do interpretador do WebKit, o último depende do SpiderMonkey, que não depende de nenhum outro componente da plataforma Mozilla. O LWN.net resumiu o debate que precedeu a decisão de incluir o Seed.
O GNOME Shell está sendo escrito com o GJS, desde antes do Seed ter sido proposto como módulo do GNOME, mas será possivelmente portado para usar o Seed. A startup litl também está desenvolvendo seus produtos com o GJS, que ela mesma lançou, e vai continuar dependendo dele por algum tempo, a não ser que a dupla Seed/JavaScriptCore implemente recursos até agora só existentes no GJS/SpiderMonkey, como a definição de variáveis locais com let.
Os desenvolvedores de ambos módulos definem a situação como “uma competição amigável”, e já foi criado inclusive um terceiro módulo contendo arquivos comuns a ambos.
Ambas bibliotecas devem amadurecer nos próximos meses, mas já são muito úteis. Um artigo no Ars Technica de janeiro mostrava um aplicativo escrito com Seed 0.3; para efeitos de comparação, o Seed já alcançou a versão 0.8.5. A documentação do Seed é de boa qualidade, e tanto o Seed quanto o GJS têm vários exemplos e até tutoriais no código-fonte. Os desenvolvedores do GJS escreveram um guia de estilo para código em JavaScript. Também existe um guia de estilo no módulo do Seed, mas bem enxuto.
Em resumo, espera-se que, com a adição do JavaScript às bindings, a plataforma de desenvolvimento do GNOME atraia cada vez mais desenvolvedores, inclusive aqueles mais íntimos das tecnologias da Web. Para que esperar o GNOME 3.0, quando a gente já pode lançar algo assim daqui a um mês?
Artigos relacionados:
Sobre o Seed implementar coisas como ‘let’, isso vai ser muito difícil. Essas são extensões da Mozilla ao padrão da linguagem, e o projeto WebKit é resistente a implementar extensões a não ser que elas sejam necessárias para compatibilidade na Web.
Acho que sou a unica pessoa que não esta feliz com isso.
Eu _pessoalmente acho Javascript uma linguagem terrível e _extremamente_ suscetível a bugs.
Boas notícias, ótimo artigo!
Uma correção: o Emacs possui seu próprio dialeto para Lisp, o Emacs Lisp. Ele não usa o Scheme.
[...] JavaScript no GNOME | Leonardo Fontenelle leonardof.org/2009/08/25/javascript-no-gnome/pt – view page – cached #Feed RSS de Leonardo Fontenelle Leonardo Fontenelle » JavaScript no GNOME Feed de comentários Leonardo Fontenelle GNOME 2.18: obrigado! Velocidade do — From the page [...]
Gustavo, é uma pena que a guerra de dialetos do JavaScript prejudique o desenvolvimento do GNOME. Espero que o ECMAScript 5 resolva isso!
semente: corrigido, obrigado!
[...] “Como o JavaScript é uma linguagem de programação incrivelmente popular, e agora muito bem adaptada à plataforma, espera-se que a novidade traga muitos frutos. Na verdade, já existem aplicativos e extensões sendo escritos para GNOME em JavaScript, e existe pelo menos uma empresa startup desenvolvendo seus produtos com essa combinação.”” [referência: leonardof.org] [...]
[...] a maior parte do código escrita em JavaScript graças ao GJS (confira também meu artigo sobre o estado do JavaScript no GNOME). Mesmo com a forte presença de software livre, o código desenvolvido pela Litl é fechado, e [...]