概要
LadybirdはC++の代替として Rust の導入を決定 最初のターゲットは LibJS (JavaScriptエンジン)の移植 移植作業は 人間主導+AIツール で短期間に完了 移植後も 性能・互換性に一切の劣化なし 今後も C++とRustの共存体制 で段階的に移行予定
LadybirdのC++からRustへの移行決定
- C++に代わるメモリ安全な言語 を長期間模索
- Swift はC++との相互運用やApple以外のプラットフォーム対応で断念
- Rust はシステムプログラミング向けのエコシステムが成熟
- 貢献者の多くがRust経験者 であることも後押し
- FirefoxやChromiumもRust導入を進めており 業界の流れ に合致
Rust選定の理由と課題
- 2024年時点では C++流OOPとの相性の悪さ からRustを一度却下
- Webプラットフォームのオブジェクトモデルは 1990年代的OOP が色濃く、Rustの所有権モデルと自然に合わない
- しかし 安全性・エコシステムの成熟 を重視し、現実的な選択としてRustを再評価
- 保守性・安全性の向上 を最優先
LibJS(JavaScriptエンジン)のRust移植
- 最初のターゲットはLibJS (LadybirdのJavaScriptエンジン)
- 字句解析器・構文解析器・AST・バイトコード生成器 など独立性が高くテストカバレッジも十分
- 移植には Claude CodeやCodex などAIツールを活用
- 人間が 移植範囲や順序・Rustコードの設計 を決定
- 数百回の小さなプロンプトでAIを誘導しながら作業
- 移植後は 複数のAIモデルでコードレビュー を実施し品質確保
移植結果と検証
- Rust版・C++版でバイト単位まで完全一致の出力 を達成
- 約 25,000行 のRustコードへの移植が 2週間で完了
- 手作業なら数ヶ月かかる規模
- ASTやバイトコードの完全一致 を確認
- テストスイート(test262, Ladybird回帰テスト)でリグレッションゼロ
- JSベンチマークでも性能劣化なし
- C++/Rust両パイプライン同時実行でWebブラウジング検証 も実施
- コードは 「C++から翻訳された」雰囲気 を強く残す設計
- 互換性重視のため C++のレジスタ割当パターン等を模倣
- 正確性と互換性が最優先
- 将来的には Rustらしいリファクタリング も予定
今後の方針と開発体制
- Rust移植はプロジェクトの主軸ではない
- エンジン開発は 引き続きC++が中心
- Rust移植は 長期的なサイドプロジェクト として進行
- C++とRustの共存体制 を維持
- 明確な 相互運用境界 を設けて新旧コードが共存
- どの部分をどの順序で移植するかはコアチームが管理
- 移植作業は必ずコアチームと調整 し、無駄な作業を防止
- Ladybirdの将来を見据えた最善の選択 との自信
まとめ
- 安全性・保守性・業界動向 を重視しRust導入を決断
- 移植作業はAIと人間の協働で効率化
- C++との互換性維持を最優先
- 段階的な移行とチーム内調整の徹底
- Ladybirdの未来を見据えた現実的な舵取り