O matemático francês Fabrice Bellard, que fundou projetos como QEMU e FFmpeg, além de criar a fórmula mais rápida para calcular o número Pi e desenvolver um formato de imagem , publicou o primeiro lançamento de um novo motor JavaScript . O motor se destaca pela sua compactação e é voltado para a incorporação em outros sistemas. O código do projeto é escrito em C e é distribuído sob a licença MIT. Também está disponível uma versão do motor compilada em WebAssembly usando Emscripten, adequada para execução em navegadores.
A implementação de JavaScript segue a especificação ES2019, incluindo módulos, geradores assíncronos e proxies. Suportam opcionalmente recursos matemáticos não padrão para JavaScript, como os tipos BigInt e BigFloat, além de . Em termos de desempenho, o QuickJS supera significativamente os motores existentes; por exemplo, no teste
bench-v8, é sete vezes mais rápido que o motor em 35%, mais de duas vezes, três vezes, e .
Além da biblioteca para embutir o motor em aplicações, o projeto também oferece um interpretador qjs, que pode ser utilizado para executar código JavaScript a partir da linha de comando. Além disso, está disponível um compilador qjsc, que pode gerar arquivos executáveis independentes que não requerem dependências externas.
Principais características:
- Compactação e facilidade de integração em outros projetos. O código consiste em apenas alguns arquivos em C, que não exigem dependências externas para a construção. Um aplicativo simples compilado ocupa cerca de 190 KB;
- Desempenho muito alto e baixo tempo de inicialização. A passagem de 56 mil testes de compatibilidade com ECMAScript leva cerca de 100 segundos ao ser executada em um único núcleo de um PC desktop comum. A inicialização do runtime leva menos de 300 microsegundos;
- Quase total suporte à especificação ES2019 e total suporte ao aplicativo 'B', que define componentes para compatibilidade com aplicações web antigas;
- Cumprimento completo de todos os testes do conjunto ECMAScript Test Suite;
- Suporte à compilação de código JavaScript em arquivos executáveis sem dependências externas;
- Um coletor de lixo baseado em contagem de referências sem execução de limpeza cíclica, permitindo um comportamento previsível e redução do consumo de memória;
- Um conjunto de extensões para cálculos matemáticos em JavaScript;
- Shell para execução de código no modo de linha de comando, com suporte a destaque de sintaxe;
- Biblioteca padrão compacta com wrappers sobre a biblioteca C.
O projeto também desenvolve três bibliotecas C auxiliares, usadas no QuickJS e adequadas para uso independente:
- libregexp — implementação rápida de expressões regulares, totalmente compatíveis com a especificação Javascript ES 2019;
- libunicode — biblioteca compacta para trabalhar com Unicode;
- libbf — implementação de operações de ponto flutuante de precisão arbitrária e funções transcendentais com arredondamento exato.
Fonte: opennet.ru
