Mesin JS AOT eksperimental dari nol
Porffor adalah mesin/kompiler/runtime JS yang unik yang melakukan pra-kompilasi kode JS ke WebAssembly atau native. Saat ini digunakan untuk tujuan riset dan masih terbatas untuk penggunaan nyata.
Kompilasi Wasm
Output WebAssembly Porffor jauh lebih cepat dan lebih kecil dibandingkan proyek JS -> Wasm yang sudah ada. Ini karena Porffor mengompilasi JS secara AOT.
- Ukuran Wasm: 32 kali lebih kecil daripada Javy (~1.3MB -> ~40KB)
- Kinerja Wasm: 18 kali lebih cepat daripada Javy (~70m -> ~4m)
Kompilasi native
Karena JS dikompilasi terlebih dahulu, Porffor dapat dikompilasi menjadi binary native sungguhan tanpa perlu mengemas runtime. Ini menghasilkan hal-hal berikut:
- Ukuran binary: lebih dari 1000 kali lebih kecil (~90MB -> <50KB)
- Penggunaan memori: lebih dari 40 kali lebih sedikit (~50MB -> ~1MB)
- Kinerja: hingga 3 kali lebih cepat
Hal tambahan
- Porffor aman: dikompilasi ke Wasm, dan ditulis dalam bahasa yang aman terhadap memori (JS).
- Porffor ditulis dari awal dengan AOT sebagai pertimbangan utama: tidak berbasis pada mesin JS yang sudah ada. Satu-satunya dependensi hanyalah parser JS.
- Porffor mendukung input TypeScript: tidak perlu langkah transpiler yang merepotkan. Cukup masukkan file TS secara langsung.
Playground
Anda bisa mencoba Porffor secara online atau lokal. Gunakan perintah 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 adalah suite pengujian kesesuaian ECMAScript resmi. Porffor menjalankannya pada setiap commit untuk melacak perkembangan kesesuaian.
Ringkasan GN⁺
Porffor adalah mesin unik yang melakukan pra-kompilasi kode JS ke WebAssembly atau native. Ini menawarkan ukuran yang jauh lebih kecil dan kinerja yang lebih cepat dibandingkan solusi yang ada. Proyek ini digunakan untuk tujuan riset dan mendukung input TypeScript. Proyek ini bisa berguna untuk meneliti kinerja dan efisiensi mesin JS. Proyek dengan fungsi serupa termasuk kompiler JS -> Wasm seperti Javy.
1 komentar
Opini Hacker News
eval, tetapi Porffor hanya mendukung kompilasi AOT