Von Grund auf experimentelle AOT-JS-Engine
Porffor ist eine ungewöhnliche JS-Engine/Compiler/Laufzeitumgebung, die JS-Code vorab zu WebAssembly oder nativ kompiliert. Derzeit wird es zu Forschungszwecken genutzt und ist für den produktiven Einsatz nur eingeschränkt geeignet.
Wasm-Kompilierung
Die WebAssembly-Ausgabe von Porffor ist im Vergleich zu bestehenden JS->Wasm-Projekten deutlich schneller und kleiner. Das liegt daran, dass Porffor JS per AOT kompiliert.
- Wasm-Größe: 32-mal kleiner als Javy (~1,3MB -> ~40KB)
- Wasm-Performance: 18-mal schneller als Javy (~70m -> ~4m)
Native Kompilierung
Da JS im Voraus kompiliert wird, kann Porffor ohne Paketierung einer Laufzeitumgebung zu echten nativen Binärdateien kompilieren. Das führt zu folgenden Ergebnissen:
- Binärgröße: mehr als 1000-mal kleiner (~90MB -> <50KB)
- Speicherverbrauch: mehr als 40-mal geringer (~50MB -> ~1MB)
- Performance: bis zu 3-mal schneller
Weitere Punkte
- Porffor ist sicher: Es wird zu Wasm kompiliert und ist in einer speichersicheren Sprache (JS) geschrieben.
- Porffor wurde von Anfang an mit AOT im Blick entwickelt: Es basiert nicht auf einer bestehenden JS-Engine. Die einzige Abhängigkeit ist ein JS-Parser.
- Porffor unterstützt TypeScript als Eingabe: Ein umständlicher Transpiler-Schritt ist nicht nötig. TS-Dateien können direkt verwendet werden.
Playground
Porffor kann online oder lokal ausprobiert werden. Dafür kann der Befehl npm i -g porffor@latest && porf verwendet werden.
- 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 ist die offizielle ECMAScript-Konformitätstest-Suite. Porffor führt sie bei jedem Commit aus, um den Fortschritt bei der Konformität zu verfolgen.
Zusammenfassung von GN⁺
Porffor ist eine ungewöhnliche Engine, die JS-Code vorab zu WebAssembly oder nativ kompiliert. Dadurch bietet sie im Vergleich zu bestehenden Lösungen deutlich kleinere Größen und schnellere Performance. Sie wird zu Forschungszwecken verwendet und unterstützt TypeScript als Eingabe. Das Projekt kann nützlich sein, um Performance und Effizienz von JS-Engines zu erforschen. Ein ähnliches Projekt mit vergleichbarer Funktionalität ist ein JS->Wasm-Compiler wie Javy.
1 Kommentare
Hacker-News-Kommentare
evalzu unterstützen, während Porffor nur AOT-Kompilierung unterstützt.