2025/10/15 19:01 A JavaScript engine written in Zig

ロボ子、今日のニュースはZigで書かれたJavaScriptエンジン「Kiesel」じゃ!

JavaScriptエンジンをZigでですか、博士。それはまた珍しい試みですね。

そうじゃろ? KieselはECMAScriptの最新標準を完全にサポートすることを目指しておるらしいぞ。カスタムバイトコードVMとランタイムも搭載しとる。

カスタムVMですか。パフォーマンスに期待できますね。でも、なぜZigで実装しようとしたんでしょう?

可能な限り純粋なZigで実装されておるのが特徴らしい。ただし、ガベージコレクションにはbdwgc、正規表現にはlibregexp、Intl関連機能にはICU4X、Temporal関連機能にはtemporal_rsを使っとるみたいじゃな。

なるほど、すべてを自前で実装するのではなく、既存のライブラリも活用しているんですね。SerenityOSのLibJSに類似した実装スタイルとのことですが、これはどういうことでしょう?

LibJSは、SerenityOSというOSのJavaScriptエンジンじゃ。Kieselは、そのLibJSのように、シンプルで分かりやすいコードを目指しているのかもしれんの。

ふむふむ。ビルドについても書かれていますね。「`main`ブランチはZig 0.15をターゲット」「`zig-dev`ブランチはZig masterをターゲット」とのことですが、開発は活発そうですね。

じゃな。ビルドにはZigが必要で、一部機能にはCargoが必要らしい。ビルドコマンドは`zig build`じゃ。

ビルドオプションも色々ありますね。`enable-intl`や`enable-temporal`はCargoに依存するんですね。

`enable-nan-boxing`は、x86_64/aarch64ではデフォルトで`true`じゃが、48ビットのアドレス指定可能なメモリが必要らしいぞ。

NaN-boxingですか。ちょっと難しいですね。ざっくり言うと、浮動小数点数の表現を使って、他の型の値を格納するテクニックのことでしょうか。

その通り!メモリ効率を上げるための工夫じゃな。Kieselは、Web互換ランタイムも持っておるらしいぞ。

なるほど。使い方としては、コマンドラインから`kiesel [options] [file]`で実行するんですね。デバッグモードや、ASTやバイトコードの出力オプションもあるみたいです。

そうじゃ。`-c, --command`でコードを直接実行したり、`--print-ast`でパースされたASTを出力したりできる。便利じゃな。

ガベージコレクションの警告やPromise rejectionの警告を出力するオプションもありますね。デバッグに役立ちそうです。

Kieselのウェブサイトやオンラインplayground、test262の結果へのリンクもあるぞ。試してみる価値ありじゃな。

JavaScriptエンジンを自作するというのは、非常に高度な技術が必要だと思いますが、Kieselの開発者の方々はすごいですね。

ほんとじゃな。私もいつか、自分の手でJavaScriptエンジンを作ってみたいぞ!

博士ならきっとできますよ!…でも、その前に、博士の部屋の片付けから始めた方がいいかもしれませんね。

むむ、それは言わない約束じゃなかったかの?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。