Ant: A Lightweight JavaScript Runtime Built from Scratch

JavaScriptランタイムの状況は、Node.js、Bun、Denoといった巨人が支配していることが多く、これらはすべてV8やJavaScriptCoreのような巨大なエンジンに依存しています。これらのエンジンは絶大なパワーを提供しますが、バイナリサイズとメモリオーバーヘッドという大きなコストを伴います。そこで登場したのがAntです。これは、現代のCLIツールやコンテナ化されたアプリケーションを悩ませている「ランタイムの肥大化」を排除するために特別に設計された、ゼロからのJavaScriptランタイムです。

The Philosophy of Minimalist Runtime Design

ほとんどの現代的なランタイムは、既存のブラウザエンジンをラップしたものです。このアプローチは迅速な開発と高いパフォーマンスを可能にしますが、結果としてバイナリサイズが50MBから100MBに及ぶことがよくあります。CLIツールや軽量なDockerコンテナを配布する開発者にとって、このオーバーヘッドは大きなボトルネックとなります。

Antは、「Ant Silver」と呼ばれる独自のエンジンをゼロから実装することで、異なるアプローチを取っています。V8、JSC、またはSpiderMonkeyへの依存を避けることで、作者はバイナリサイズを驚異的に小さく抑えることに成功しました。標準ビルドでは約9MB、-Os最適化でコンパイルすると6.5MBという低さです。

Performance and Cold Starts

より小さなランタイムの主な利点の一つは、コールドスタートのレイテンシの削減です。これは、サーバーレス環境やCLIアプリケーションのように、最初の実行までの時間が最も目に見えるパフォーマンス指標となる場合に特に重要です。

M4 Proチップ上でHonoのコールドスタートテスト(examples/npm/hono/bench-coldstart.js)を使用して実施されたベンチマークによると、Antは驚異的なスピードを示しています:

  • Cold start time: ~5ms
  • Comparison: Bunよりも約2.4倍速く、Node.jsよりも5.8倍速いです。

作者は、Antが特定の形状やシナリオにおいてV8と競合できるほど高性能であることを述べていますが、これは特化型のツールであることを認識することが重要です。焦点は、あらゆるJavaScriptワークロードにおける生の、汎用的なスループットではなく、効率性と敏捷性にあります。

Technical Architecture and Compatibility

ランタイムをゼロから構築するには、言語仕様とAPIの互換性に対する厳格なアプローチが必要です。Antは以下の技術的なマイルストーンに焦点を当てています:

The Engine and JIT

Ant Silverは、ランタイムを動かすコアエンジンです。将来的なパフォーマンス向上を確実にするため、プロジェクトはJust-In-Time (JIT) コンパイラを実装しており、現在はMIR (Mid-level Intermediate Representation) のフォークをバックエンドとして利用しています。

Standards Compliance

実用性を確保するため、AntはWinterCG Minimum Common APIをターゲットにしており、異なるランタイム間で動作する標準化されたAPIセットを目指しています。現在の互換性ステータスは以下の通りです:

  • javascript-zoo compat-table: 100% pass rate.
  • test262: Approximately 64% completion.

Use Cases for Ant

Antは、大規模なエンタープライズ・バックエンドのためにNode.jsを置き換えることを意図していませんが、特定のアーキテクチャ上のニーズを満たす重要なギャップを埋めます:

  1. Embedded CLI Tools: JavaScriptで駆動するCLIを、ユーザーに重いランタイム環境のインストールを要求することなく配布すること。
  2. Micro-Containers: クラウドネイティブ環境におけるデプロイとスケーリングを高速化するために、Dockerイメージのフットプリントを削減すること。
  3. Edge Computing: ミリ秒が重要となるイベント駆動型関数において、超高速なコールドスタート時間を活用すること。

バイナリサイズと起動速度を優先することで、Antは、従来のエンジンの重荷なしにJavaScriptの柔軟性が必要な開発者にとって、実行可能な代替案を提供します。

Sources