Um motor JS AOT experimental desde o início
Porffor é um motor/compilador/runtime de JS único que faz a compilação antecipada de código JS para WebAssembly ou nativo. Atualmente, é usado para fins de pesquisa e tem uso prático limitado.
Compilação para Wasm
A saída WebAssembly do Porffor é muito mais rápida e menor do que a de projetos JS -> Wasm existentes. Isso ocorre porque o Porffor compila JS com AOT.
- Tamanho do Wasm: 32 vezes menor que o Javy (~1.3MB -> ~40KB)
- Desempenho do Wasm: 18 vezes mais rápido que o Javy (~70m -> ~4m)
Compilação nativa
Como compila JS antecipadamente, o Porffor pode gerar binários nativos reais sem empacotar um runtime. Isso resulta em:
- Tamanho do binário: mais de 1000 vezes menor (~90MB -> <50KB)
- Uso de memória: mais de 40 vezes menor (~50MB -> ~1MB)
- Desempenho: até 3 vezes mais rápido
Informações adicionais
- O Porffor é seguro: é compilado para Wasm e escrito em uma linguagem com segurança de memória (JS).
- O Porffor foi criado com AOT em mente desde o início: não é baseado em motores JS existentes. Sua única dependência é um parser de JS.
- O Porffor oferece suporte a entrada em TypeScript: não é necessário um passo incômodo de transpiler. Basta fornecer arquivos TS diretamente.
Playground
É possível experimentar o Porffor online ou localmente. Basta usar o comando npm i -g porffor@latest && porf.
- Prime Numbers
- Fibonacci
- Factorial
- Sum of Digits
- Exception
- Array Reading
- ArrayPrototype
- Math Proposals Parser: acorn, meriyah, hermes-parser, @babel/parser
- Target: wasm
const isPrime = number => {
if (number < 2) return false;
for (let i = 2; i < number; i++) {
if (number % i == 0) return false;
}
return true;
}
let counter = 0;
while (counter <= 10000) {
if (isPrime(counter)) Porffor.numberLog(counter);
counter++;
}
Test262
O Test262 é a suíte oficial de testes de conformidade do ECMAScript. O Porffor a executa a cada commit para acompanhar o progresso de conformidade.
Resumo do GN⁺
Porffor é um motor único que compila antecipadamente código JS para WebAssembly ou nativo. Isso proporciona tamanho muito menor e desempenho mais rápido em comparação com soluções existentes. Ele é usado para fins de pesquisa e oferece suporte a entrada em TypeScript. Este projeto pode ser útil para pesquisar desempenho e eficiência de motores JS. Um projeto com funcionalidade semelhante é o Javy, um compilador de JS -> Wasm.
1 comentários
Opiniões no Hacker News
eval, mas o Porffor oferece apenas compilação AOT