Categorias

Enumerando e analisando mais de 40 implementações de JavaScript (que não são V8)

V8 é o interpretador JavaScript, também chamado de máquina virtual Javascript, desenvolvido pela Google e utilizado em seu navegador Google Chrome. Com o peso de seus criadores e a quase onipresença do navegador, foi apenas uma questão de tempo para essa implementação do JavaScritp se tornar dominante no mercado.

Entretanto, um bom desenvolvedor sabe que não existe uma única solução para todos os problemas. Muitas vezes nem mesmo existe uma solução única para um problema bastante específica. Ter a mente aberta para um arsenal de possibilidades e cenários é fundamental para se encontrar respostas para desafios.

Phil Eaton é um desenvolvedor de Queens, Nova York, que está trabalhando em um IDE open source batizado de DataStation. Em um artigo publicado na internet, ele mostra que existem muito mais implementações de JavaScript do que imagina nossa vã filosofia e que não dependem do motor V8.

Com sua autorização, traduzimos e reproduzimos o artigo na íntegra:

“V8 é, tenho certeza, a implementação de JavaScript mais usada atualmente. Usado no Chrome, (e por extensão) Microsoft Edge, Node.js, etc. JavaScriptCore do Safari e SpiderMonkey do Firefox também são candidatos a implementações extremamente populares.

Mas o que mais existe? E se eu quiser incorporar JavaScript em um programa C, ou um programa Go, ou um programa Rust, ou um programa Java (e assim por diante)? Ou e se eu quiser executar JavaScript em um microcontrolador? Ou usá-lo como base para pesquisas linguísticas? Acontece que existem muitas implementações de alta qualidade por aí.

Esta postagem descreve várias delas e suas opções de implementação. Não vou cobrir V8, JavaScriptCore ou SpiderMonkey porque eles são enormes e escondem vários interpretadores e compiladores dentro deles. Além disso, você já sabe sobre eles.

Vou perder algumas implementações e errar alguns detalhes. Por favor, tweet ou me mande um email com suas correções! Eu estaria particularmente interessado em ouvir sobre pesquisa pura; e implementações comerciais de código fechado de JavaScript.

Apoiadas por empresas

Essas são implementações que fariam sentido para seus próprios aplicativos comerciais de produção.

Em JVM

Embarcáveis

  • Njs da Nginx
  • ChowJS: compilador AOT proprietário baseado em QuickJS para desenvolvedores de jogos
    • Suporte: tudo o que QuickJS faz presumivelmente (veja mais abaixo para QuickJS)
    • Linguagem de implementação: C presumivelmente
    • Runtime: interpretador de bytecode do QuickJS, mas também um compilador AOT
    • Parser: presumivelmente do QuickJS
    • Primeiro lançamento: 2021
    • Notas: O código não está disponível, portanto, uma análise exata desses pontos não é possível no momento.
  • Mujs da Artifex

Em sistemas embarcados

Outras

Não sei se devo colocar o ChakraCore da Microsoft nesta lista ou na próxima. Vou colocá-lo aqui, mas observe que, a partir deste ano de 2021, eles estão fazendo a transição para se tornar um projeto voltado para a comunidade.

Maduras, criadas pela comunidade

As implementações no topo da lista a seguir são mais confiáveis e comprovadas. Implementações em direção ao final nem tanto.

Se você deseja se envolver no desenvolvimento de linguagens, as implementaões mais abaixo na lista podem ser um ótimo lugar para começar, já que normalmente precisam trabalhar em documentação, teste e recursos de linguagem.

Esses últimos não são brinquedos, mas também são mais experimentais ou, no caso do AssemblyScript, não são JavaScript.

Implementações de pesquisa

Obrigado a @smarr por contribuir com eJS, Higgs e b9!

Notáveis abandonadas

Implementações notáveis para brincar

Ótimo para se inspirar se você nunca implementou uma linguagem antes.

  • js-to-c: um compilador de JavaScript para C, escrito em C
  • mjs: interpretador AST não apenas para ES5 ou mesmo ES3, mas também ES1
  • gojis: interpretador AST em Go
  • tojs: Bytecode VM in Rust
  • v2: Bytecode VM em Go
  • SparrowJS: interpretador AST em C ++
  • jsc: Meu próprio experimento compilando JavaScript para C ++ / libV8″

Publicado originalmente como “Enumerating and analyzing 40+ non-V8 JavaScript implementations” em 21 de setembro de 2021. Traduzido e republicado com autorização do autor.