Un motor JS AOT experimental desde cero
Porffor es un motor/compilador/runtime de JS único que compila código JS por adelantado a WebAssembly o nativo. Actualmente se usa con fines de investigación y su uso práctico es limitado.
Compilación a Wasm
La salida WebAssembly de Porffor es mucho más rápida y pequeña que la de proyectos existentes de JS -> Wasm. Esto se debe a que Porffor compila JS con AOT.
- Tamaño de Wasm: 32 veces más pequeño que Javy (~1.3MB -> ~40KB)
- Rendimiento de Wasm: 18 veces más rápido que Javy (~70m -> ~4m)
Compilación nativa
Como compila JS por adelantado, Porffor puede compilar a binarios nativos reales sin empaquetar un runtime. Esto produce los siguientes resultados:
- Tamaño del binario: más de 1000 veces más pequeño (~90MB -> <50KB)
- Uso de memoria: más de 40 veces menor (~50MB -> ~1MB)
- Rendimiento: hasta 3 veces más rápido
Puntos adicionales
- Porffor es seguro: compila a Wasm y está escrito en un lenguaje con seguridad de memoria (JS).
- Porffor fue escrito desde cero pensando en AOT: no se basa en motores JS existentes. Su única dependencia es un parser de JS.
- Porffor soporta entrada TypeScript: no hace falta una etapa molesta de transpiler. Basta con pasar archivos TS directamente.
Playground
Puedes probar Porffor en línea o localmente. Solo usa el comando npm i -g porffor@latest && porf.
- Números primos
- Fibonacci
- Factorial
- Suma de dígitos
- Excepción
- Lectura de arreglos
- ArrayPrototype
- Parser de propuestas matemáticas: acorn, meriyah, hermes-parser, @babel/parser
- Objetivo: 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
Test262 es la suite oficial de pruebas de conformidad de ECMAScript. Porffor la ejecuta en cada commit para seguir el progreso de conformidad.
Resumen de GN⁺
Porffor es un motor único que compila código JS por adelantado a WebAssembly o nativo. Ofrece tamaños mucho más pequeños y mejor rendimiento que las soluciones existentes. Se usa con fines de investigación y soporta entrada TypeScript. Este proyecto puede ser útil para investigar el rendimiento y la eficiencia de los motores JS. Un proyecto con funciones similares es un compilador JS -> Wasm como Javy.
1 comentarios
Opiniones de Hacker News
eval, pero Porffor solo soporta compilación AOT