flow-bin 0.319

465文字
2分
編集

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 に書き直すより移植完了を優先し、移植中は RcRefCell を多用する OCaml 風のコードも許容した。AI 生成コードには unsafe 禁止を適用した。

#AI 支援による移植

2025 年後半から AI エージェントで段階的に移植した。パーサーは 4 週間で完了し、テスト合格と 2 倍の性能改善を確認した。型チェッカーは 1 か月で移植し、初回実行時はチェッカーテストがすべて失敗したが、1 週間の連続修正で全テストに合格した。チェッカー完了後は OCaml 側と同一の統合テストを Rust 実装でも走らせ、コードフリーズなしで両方のコードベースを並行開発した。

性能面では AI が Big-O 問題や Rc/RefCell による循環参照の解消、プロファイリングに基づく微調整を担当した。一方で work-stealing スケジューラの導入や暗黙の再計算バグなど、大きな改善は人間の判断が必要だった。

#参考文献