発生日:2026年2月23日

Ladybirdブラウザープロジェクトは、C++から段階的に移行する際に使用する言語としてRustを選んだ。理由として、メモリー安全性、成熟したシステムプログラミングのエコシステム、コントリビューターにとっての親しみやすさを挙げている。この変更はブラウザーエンジンを直ちに書き直すのではなく、サブシステムごとに進められる。

プロジェクトのリーダーらは以前から、C++に代わるメモリー安全な言語を探していた。過去にはSwiftを調査したが、C++との相互運用性やApple以外のプラットフォームへの対応が、Ladybirdの要件を満たすには不十分だと判断した。Rustも2024年に評価されたが、その所有権モデルが、ガベージコレクションと深い継承構造に大きく依存するウェブプラットフォームのオブジェクトモデルに無理なく適合しなかったため、当初は採用を見送られた。

Ladybirdは今回、自らが現実的と表現する選択をした。プロジェクトはRustの安全性とシステム用ツール群に加え、FirefoxとChromiumのコードベースで採用されていることを理由に挙げた。最初の変換対象は、LadybirdのJavaScriptエンジンであるLibJSの一部だった。選ばれたコンポーネントには、字句解析器、構文解析器、抽象構文木、バイトコード生成器が含まれた。これらは比較的自己完結しており、test262テストスイートでカバーされている領域だ。

最初の移植では、人工知能(AI)を使ったコーディングツールが大きな役割を果たした。Ladybirdによると、Claude CodeとCodexが、数百件の小規模で具体的な指示を通じて実装の変換を支援するために使用された。人間の開発者が作業の順序と求める構造を決めた上で、複数回のレビューを実施し、異なるモデルにエラーや不適切なパターンを見つけるよう指示した。プロジェクトは、このプロセスが自律的なものではなく、人間の指揮によるものだったと明確に説明している。

成果は約2万5,000行のRustコードで、手作業による移植なら数カ月かかるとの推定に対し、約2週間で完了した。Ladybirdによると、両方のパイプラインが一致する出力を生成することを必須条件とした。検証では、C++とRustの構文解析器が生成した抽象構文木が同一であり、2つのコンパイラーが生成したバイトコードも同一であることが確認された。また、追跡しているJavaScript性能ベンチマークで性能低下はなかったと報告している。追加のブラウザーテストでは、両方の実装を同時に動かし、ウェブ閲覧中に処理したJavaScriptの出力を比較した。

この初期バージョンでは、慣用的なRustコードにすることよりも互換性が優先された。同等のバイトコードを維持するため、レジスター割り当てパターンなど、一部の要素は意図的にC++の実装上の選択を再現している。チームは、対応するC++の処理経路を廃止できるとの確信を得た後、Rustコードを簡素化する予定だ。

今回の採用によって、ブラウザーの移植が開発の中心的な優先事項になるわけではない。Ladybirdによると、エンジン開発は引き続きC++で行われ、選択されたRustコンポーネントは、明確に定義された相互運用境界を介して共存する。中核チームは今後の移植の順序と範囲を管理する方針であり、作業をプロジェクトが受け入れられる内容に合わせるため、変換を始める前に調整するようコントリビューターに求めている。