- Mesin JavaScript ringan berbasis PrimJS, dikompilasi ke WebAssembly sehingga aman dan sangat portabel
- Menjamin keamanan dan skalabilitas melalui struktur sandbox yang kuat dengan keamanan memori, pembatasan fitur JavaScript, dan filosofi
fail-fast
- Dapat menjalankan ratusan VM secara paralel bahkan pada satu mesin, serta memungkinkan pengaturan batas memori dan jumlah komputasi (gas) untuk skrip
- Dapat di-embed ke hampir semua platform hanya dengan satu file
.wasm tanpa build yang rumit atau FFI, dan ukurannya juga sangat kecil, sekitar 800KB
- Performa hingga 28% lebih baik daripada QuickJS, dan dalam lingkungan JIT menawarkan kecepatan eksekusi setingkat native
Hako: mesin JavaScript yang kecil, cepat, dan aman
Apa itu Hako?
- Mesin JavaScript portabel, berfokus pada keamanan, dan berkinerja tinggi yang dikembangkan berdasarkan PrimJS
- Nama Hako berasal dari bahasa Jepang yang berarti “kotak” (箱)
- Mesin berbasis WebAssembly yang dirancang agar siapa pun dapat dengan mudah menanamkannya di lingkungan apa pun
Keamanan: keamanan memori dan pembatasan fitur
- Ditulis dalam C/C++ tetapi dikompilasi ke WebAssembly → menjamin keamanan memori dan sandbox eksekusi
- Fitur JavaScript itu sendiri juga bisa dibatasi:
- menghapus fungsi tertentu
- membatasi agar alokasi memori tidak dimungkinkan
- membatasi waktu eksekusi, penggunaan memori, gas, dan lain-lain
- Melalui
VMContext, pengguna berbahaya dapat diidentifikasi dan resource dapat dikendalikan
- Dengan strategi fail-fast, kode yang tidak stabil atau menggunakan resource secara berlebihan dapat dihentikan lebih awal
Kemudahan embedding: cukup satu .wasm
- Tidak menggunakan Emscripten → bisa di-embed selama ada runtime WebAssembly modern
- Tidak memerlukan wrapper FFI untuk berbagai bahasa → bisa digunakan tanpa proses build yang rumit
- Contoh: tersedia contoh embedding Hako di Go
- Build rilis terdiri dari file
.wasm berukuran hanya 800KB
Performa: lebih cepat daripada QuickJS
- Seperti PrimJS yang lebih cepat dari QuickJS, Hako juga memberikan peningkatan performa rata-rata 28% dibanding QuickJS
- Performa dimaksimalkan melalui optimisasi SIMD dan peningkatan pada beberapa jalur hot path
- Tidak ada penurunan performa akibat WebAssembly — berkat optimisasi JIT di V8, Wasmtime, dan JavaScriptCore, performanya hampir setingkat native
- API untuk pengukuran performa dan profiling juga sudah terintegrasi
Keterbatasan dan rencana ke depan
- Beberapa fitur yang digunakan di PrimJS (template interpreter, snapshot GC) masih belum didukung sepenuhnya
- Karena tool snapshot milik ByteDance belum di-open-source, pengembang sedang mengimplementasikan alatnya sendiri
- Saat ini masih berada pada tahap beta awal, dan masukan sangat penting untuk menstabilkan API/ABI
- GitHub - hako
2 komentar
https://github.com/fernvenue/hako-go-example
sepertinya adalah tautan yang tidak ada. Contoh embedding Go tampaknya adalah
https://gist.github.com/andrewmd5/197efb527ef40131c34ca12fd6d0a61e
yang ini.
Oh, sepertinya sudah berubah. Saya sudah memperbaikinya. Terima kasih.