12 ポイント 投稿者 xguru 2025-05-09 | 2件のコメント | WhatsAppで共有
  • PrimJSベースの軽量JavaScriptエンジンで、WebAssemblyにコンパイルされているため、安全性と高い移植性を備える
  • メモリ安全性とJavaScript機能の制限を提供する強力なサンドボックス構造と「fail-fast」の哲学により、セキュリティと拡張性を確保
  • 単一マシン上でも数百個のVMを並列実行でき、スクリプトのメモリおよび演算量(gas)制限も設定可能
  • 複雑なビルドやFFIなしで単一の.wasmファイルとしてほぼすべてのプラットフォームに埋め込み可能で、サイズも約800KBと非常に小さい
  • QuickJSより最大28%向上した性能を示し、JIT環境ではネイティブ級の実行速度を提供

Hako: 小さく、速く、安全なJavaScriptエンジン

Hakoとは?

  • PrimJSをベースに開発された、ポータブルでセキュリティ重視、高性能なJavaScriptエンジン
  • Hakoという名前は、「箱」を意味する日本語に由来
  • 誰でもどの環境でも簡単に組み込めるよう設計されたWebAssemblyベースのエンジン

セキュリティ: メモリ安全性と機能制限

  • C/C++で書かれているがWebAssemblyにコンパイルされる → メモリ安全性と実行サンドボックスを保証
  • JavaScript機能自体も制限可能:
    • 特定の関数を削除
    • メモリ割り当て不可に制限
    • 実行時間、メモリ使用量、gasなどを制限
  • VMContextを通じて悪意あるユーザーを識別し、リソース制御が可能
  • fail-fast戦略により、不安定または過剰なリソースを消費するコードを早期に停止

組み込みやすさ: .wasmひとつで十分

  • Emscriptenを使用しない → モダンなWebAssemblyランタイムさえあれば埋め込み可能
  • 各種言語向けのFFIラッパーが不要 → 複雑なビルド工程なしでも利用可能
  • 例: GoでHakoを埋め込むサンプルを提供
  • リリースビルドはわずか800KBの.wasmファイルで構成

性能: QuickJSより高速

  • PrimJSがQuickJSより高速であるのと同様に、HakoもQuickJS比で平均28%の性能向上
  • SIMD最適化および一部ホットパス経路の改善により性能を最大化
  • WebAssemblyによる性能低下はなく、V8、Wasmtime、JavaScriptCoreではJIT最適化によりほぼネイティブ級
  • 性能計測およびプロファイリングAPIも内蔵

制限事項と今後の計画

  • PrimJSで使われていた一部機能(テンプレートインタープリタ、GCスナップショット)はまだ完全にはサポートされていない
  • ByteDanceのスナップショットツールがまだオープンソース化されておらず、開発者が独自ツールを実装中
  • 現在は初期ベータ段階で、API/ABI安定化のためフィードバックが非常に重要
  • GitHub - hako

2件のコメント

 
secret3056 2025-05-09

https://github.com/fernvenue/hako-go-example
は存在しないリンクのようですね。Go の埋め込み例は
https://gist.github.com/andrewmd5/197efb527ef40131c34ca12fd6d0a61e
のようです。

 
xguru 2025-05-09

あ、変わったみたいですね。修正しておきました。ありがとうございます。