12 poin oleh xguru 2025-05-09 | 2 komentar | Bagikan ke WhatsApp
  • 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

 
secret3056 2025-05-09

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.

 
xguru 2025-05-09

Oh, sepertinya sudah berubah. Saya sudah memperbaikinya. Terima kasih.