flow-bin 0.319
Flow の OCaml コードベースは Rust へ完全移植され、v0.319 以降の flow-bin npm パッケージは Rust 製バイナリで配布される。Meta 内の大規模 JavaScript モノレポでの計測では、型チェックの各段階が OCaml 版よりおおむね 2 倍速く、最も計算量の多い段階では 30% から 100% 短縮された。
設計上の判断
移植方針は次のとおり。
- 言語は Go や Kotlin ではなく Rust を選び、SWC や oxlint など Rust 製 JS ツールチェーンとの統合余地を確保した。
- 挙動を変えないドロップイン置き換えにするため、全面書き直しではなく行単位の機械的移植を徹底した。共有メモリだけは OCaml 5 以前の C ワークアラウンドをやめ、Rust で再実装した。
- 完全に慣用的な Rust に書き直すより移植完了を優先し、移植中は
RcとRefCellを多用する OCaml 風のコードも許容した。AI 生成コードには unsafe 禁止を適用した。
AI 支援による移植
2025 年後半から AI エージェントで段階的に移植した。パーサーは 4 週間で完了し、テスト合格と 2 倍の性能改善を確認した。型チェッカーは 1 か月で移植し、初回実行時はチェッカーテストがすべて失敗したが、1 週間の連続修正で全テストに合格した。チェッカー完了後は OCaml 側と同一の統合テストを Rust 実装でも走らせ、コードフリーズなしで両方のコードベースを並行開発した。
性能面では AI が Big-O 問題や Rc/RefCell による循環参照の解消、プロファイリングに基づく微調整を担当した。一方で work-stealing スケジューラの導入や暗黙の再計算バグなど、大きな改善は人間の判断が必要だった。