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?

8 respostas em “JavaScript no GNOME

  1. 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.

  2. Pingback: Twitter Trackbacks for JavaScript no GNOME | Leonardo Fontenelle [leonardof.org] on Topsy.com

  3. Pingback: Escrevendo aplicativos e extensões em JavaScript para o GNOME

  4. Pingback: Startup Litl lança “webbook” baseado em Linux « Leonardo Fontenelle

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s