- Motor JavaScript implementado do zero em Rust, com uma arquitetura que oferece suporte quase completo à especificação ECMAScript
- Atualmente passa em mais de 97% da linguagem ECMAScript, validado com testes baseados no test262
- Inspirado no design do Ignition do V8 e no LibJS do SerenityOS, implementa a maior parte dos componentes diretamente, com dependências mínimas
- Inclui VM de bytecode, coletor de lixo compactante, motor de RegExp personalizado e parser, além de fornecer objetos e funções embutidos em conformidade com a especificação
- Ainda não está pronto para produção, mas representa um avanço importante no desenvolvimento de um motor JS em Rust com recursos no nível do ES2025
Visão geral do Brimstone
- O Brimstone é um motor JavaScript totalmente novo escrito em Rust, com o objetivo de implementar fielmente a especificação ECMAScript
- Atualmente oferece suporte a mais de 97% da linguagem ECMAScript e passa nos testes do test262
- Ainda é um projeto em andamento e não está pronto para uso em produção
Design e implementação
- Implementa diretamente a especificação ECMAScript e busca inspiração de design no V8 e no LibJS do SerenityOS
- A maior parte dos componentes do motor é implementada diretamente sem dependências, com ICU4X como única exceção
- Principais componentes:
- VM baseada em bytecode inspirada no V8 Ignition
- Coletor de lixo compactante escrito em código Rust altamente
unsafe
- Motor de RegExp personalizado e parser
- Implementação de objetos e funções embutidos em conformidade com a especificação
Build e execução
Sistema de testes
- Usa um conjunto de testes de integração oficiais e de terceiros, incluindo o test262
- Inclui um runner de testes de integração personalizado (executado com o comando
cargo brimstone-test)
- Testes unitários e de snapshot são executados com
cargo test
- Mais informações sobre testes podem ser encontradas em
tests/README.md
Funcionalidades ainda não implementadas
- Implementa todos os recursos até o ES2024 e a maior parte das propostas Stage 4 com base na reunião do TC39 de fevereiro de 2025
- Recursos ainda não suportados:
- SharedArrayBuffer
- Atomics
2 comentários
Incrível..
Comentários do Hacker News
Sou grato ao @ivankra por adicioná-lo ao javascript-zoo e rodar os benchmarks
Foi um projeto de hobby no qual venho investindo tempo de forma constante nos últimos 3 anos para aumentar a qualidade e o desempenho
É possível que ele cresça se atingir o nível de recursos do Boa e for reforçado para uso em produção, mas passar em 97% da especificação com esse tamanho pequeno é bastante impressionante
O Brimstone não faz isso, e essa é a maior parte da diferença de tamanho
Para lidar corretamente com Unicode, são necessários vários MB de dados, então hoje em dia não é fácil criar executáveis pequenos
Se o suporte a Unicode for obrigatório, existe um limite mínimo de tamanho
A configuração padrão normalmente é voltada para desempenho, então mudar opções como
codegen-units=1ou remover panic pode alterar o resultadoO Boa passa em cerca de 91%, então o Brimstone é mais completo
Quanto menor o projeto, mais o código tende a ser pequeno, limpo e fácil de manter
Sempre existe um certo overhead na colaboração
Repositório do Boa
Os recursos são quase equivalentes aos do Boa e, em alguns benchmarks, a velocidade é duas vezes maior
Acho que é um fluxo natural
Mas dizem que este projeto usa bastante unsafe
Parece uma espécie de fenômeno Blub
No fim, também é um elemento de marketing, mas é verdade que, em média, o nível de acabamento é mais alto
Fiquei imaginando uma intro da Ikari aparecendo antes de o sistema operacional iniciar
Totalmente nativo em Rust, sem dependência de link com C/C++
Dá para adicionar scripting em JS a um servidor de binário único de 40 MB
É realmente muito legal ver vários motores JS baseados em Rust surgindo
Acho aceitável se a área unsafe for mantida no mínimo possível
Vec, usa unsafe internamenteO importante é limitar o unsafe a áreas pequenas, para que possam ser verificadas
Implementação de GC é uma dessas áreas excepcionais
Se eu fosse fazer um runtime de JS em Rust, primeiro implementaria tudo de forma segura e só usaria unsafe quando necessário
Para implementar um GC de alto desempenho, isso acaba sendo necessário em alguns pontos
Rust é simplesmente uma linguagem imperativa rápida e boa
RcouArc