出来事の日付:2026年7月8日。
BunはZigからRustへと書き換えられている。これはJavaScriptランタイムの開発を中断することなく、繰り返し発生するメモリ管理上の不具合を減らすことを目的とした大規模なエンジニアリング上の変更だ。開発者のジャレッド・サムナーは、この作業について、Bunの既存の設計、性能目標、機能、TypeScriptテストスイートを維持する、おおむね機械的な移植だと説明した。
この決定は、長年にわたる成長を受けたものだ。Bunは2021年、サムナーがesbuildのトランスパイラをZigへ移植したことから始まり、現在、そのコマンドラインツールは月間2,200万回を超えるダウンロードを記録している。Vercel、Railway、DigitalOceanなどのサービスが公式サポートを提供する一方、Claude CodeやOpenCodeといった開発者向けツールはBunをランタイムとして使用している。Bunは2025年12月にAnthropicに買収され、現在そのチームは同社で働いている。
サムナーは、Bunの不具合の原因はZig自体ではないと強調した。代わりに、JavaScriptCoreのガベージコレクション対象オブジェクトと、Bunが手動で管理するメモリとの間にある扱いにくい境界を指摘した。コードはJavaScriptの例外を考慮し、ポインタがガベージコレクタから見える状態を保ち、割り当てたメモリを正確に一度だけ解放しなければならない。こうした規則に関する誤りはメモリリークを引き起こし、頻度は低いもののクラッシュも生じさせてきた。Bunの約5分の1はすでにC++だが、多くの所有権に関する誤りを発見するうえで、C++は依然として慣例、レビュー、実行時ツールに大きく依存することになるとチームは結論づけた。
Rustの所有権システム、`Drop`による自動クリーンアップ、安全な言語としての制約は、解放後使用、二重解放、クリーンアップ漏れといった種類の問題をコンパイル時エラーに変えられる。これにより開発者は、ファジング、継続的インテグレーション、またはサニタイザーの実行前にフィードバックを得られる。
従来型の書き換えを正当化するのは難しかっただろう。コメントを除いても、既存の実装には53万5,496行のZigコードがあり、サムナーは通常なら小規模なチームで約1年かかると見積もっていた。そこで彼は、リリース前のClaude Fable 5モデルを使って変換を試した。数日後には既存テストの大部分が通過し、生成されたRustコードはZigの実装に忠実に沿っていたため、彼は作業を進める決断をした。
この手法は、段階的な置き換えではなく、システム全体の変換だ。サムナーは、段階的な移行では一時的な橋渡し用コードが導入され、アーキテクチャ上の複雑さが長引くと主張した。そのため言語の変更では、動作の差異を最小限に抑えることを目指し、言語に依存しないTypeScriptテストスイートを互換性の確認に使用する。発表では、コンパイラによって強制される所有権が中心的な利点として示されており、Bunの初期の急速な開発を可能にした言語を否定するものではない。



