Un moteur JS AOT expérimental dès le départ
Porffor est un moteur/compilateur/runtime JS unique qui précompile le code JS en WebAssembly ou en natif. À l’heure actuelle, il est utilisé à des fins de recherche et son usage réel reste limité.
Compilation Wasm
La sortie WebAssembly de Porffor est bien plus rapide et compacte que celle des projets JS -> Wasm existants. Cela s’explique par le fait que Porffor compile le JS en AOT.
- Taille du Wasm : 32 fois plus petite que Javy (~1.3MB -> ~40KB)
- Performances du Wasm : 18 fois plus rapides que Javy (~70m -> ~4m)
Compilation native
Comme il précompile le JS, Porffor peut produire de véritables binaires natifs sans embarquer de runtime. Cela entraîne les résultats suivants :
- Taille du binaire : plus de 1000 fois plus petite (~90MB -> <50KB)
- Utilisation mémoire : plus de 40 fois inférieure (~50MB -> ~1MB)
- Performances : jusqu’à 3 fois plus rapides
Autres points
- Porffor est sûr : il compile en Wasm et est écrit dans un langage memory-safe (JS).
- Porffor a été conçu dès le départ pour l’AOT : il ne repose sur aucun moteur JS existant. Sa seule dépendance est un parseur JS.
- Porffor prend en charge l’entrée TypeScript : aucune étape pénible de transpilation n’est nécessaire. Il suffit de lui donner directement un fichier TS.
Playground
Il est possible d’essayer Porffor en ligne ou en local. Utilisez la commande 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
Test262 est la suite officielle de tests de conformité ECMAScript. Porffor l’exécute à chaque commit afin de suivre l’avancement de sa conformité.
Résumé GN⁺
Porffor est un moteur original qui précompile le code JS en WebAssembly ou en natif. Il offre une taille bien plus réduite et de meilleures performances que les solutions existantes. Il est utilisé à des fins de recherche et prend en charge l’entrée TypeScript. Ce projet peut être utile pour étudier les performances et l’efficacité des moteurs JS. Parmi les projets comparables, on trouve des compilateurs JS -> Wasm comme Javy.
1 commentaires
Avis Hacker News
eval, alors que Porffor ne prend en charge que la compilation AOT