Documentation-Guided Agentic Codebase Migration from C to Rust
RustPrint は、ソースコードをアーキテクチャ設計図に変換して反復的なエージェントの計画・検証・修正を導くドキュメント駆動型のエージェントフレームワークであり、既存の LLM ベースの翻訳器と比較して優れたコンパイル成功率と機能保存を実現し、C から Rust へのスケーラブルなリポジトリレベルの移行を可能にする。
原論文は CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) でライセンスされています。 これは以下の論文のAI生成解説です。著者が執筆または承認したものではありません。技術的な正確性については原論文を参照してください。 免責事項の全文を読む
あなたは「C」という言語で書かれた巨大で古い図書館を想像してみてください。それはオペレーティングシステムやネットワークツールなど、多くの重要なシステムの基盤となっていますが、不安定な土台の上に建てられています。「レンガ」(メモリ管理)は緩んでおり、非常に慎重でなければ、建物全体が崩壊したり、侵入者(セキュリティハック)によって簡単に破壊されたりする可能性があります。
あなたは、この図書館全体を「Rust」という新しい現代的な言語で再建したいと考えています。Rust は要塞のようです:建物が崩壊するのを防ぐ自動的な安全ロックを備えています。しかし、ここには問題があります。図書館全体をレンガ一枚一枚を置き換えるように翻訳するのは、信じられないほど困難です。部屋を一つずつ翻訳しようとするだけでは、設計図を失ったり、部屋同士の接続方法を忘れたり、Rust に見えるが壊れた C の建物のように振る舞う建物になってしまったりすることがよくあります。
RustPrint は、この問題を解決するために設計された新しい「建築家と建設チーム」(AI エージェントシステム)です。コードを一行ずつ翻訳するのではなく、新しい建物が安全で機能的であり、元の設計に忠実であることを保証するための巧妙な 3 段階の戦略を採用しています。
以下は、簡単な比喩を用いた RustPrint の仕組みです:
1. 「設計図」フェーズ(ドキュメントファースト)
ほとんどの翻訳ツールは、文を翻訳し、次に次の文、そしてその次の文を翻訳しようとします。RustPrint は立ち止まって、「待て、まず本全体を読もう」と言います。
- 何をするか: 古い C のコードベース全体を読み、システムがどのように機能し、部品がどのように接続され、なぜそのように構築されたかを記述した、巨大で詳細な取扱説明書(ドキュメント)を作成します。
- 比喩: 古い城を改装すると想像してください。単に石を交換するのではなく、まず専門家を採用して、城の配置、秘密の通路、構造論理の完璧で詳細な地図を描かせます。この地図が新築の「設計図」となります。
- なぜ重要か: これにより、AI は構文だけでなく、コードの意図を理解することが保証されます。2 つの異なる部屋が互いにどのように通信する必要があるかを AI が忘れるのを防ぎます。
2. 「建設」フェーズ(エージェントによる翻訳)
設計図が準備できると、RustPrint は新しい Rust バージョンを構築するために専門の AI ワーカーチームを送り出します。
- プランナー: 設計図を見て、「ここには台所を、あそこには図書館を建て、配管が接続されていることを確認する必要がある」と言います。ステップバイステップの建設計画を作成します。
- ビルダー: 部屋(コードモジュール)を一つずつ建設します。
- 検査員: 部屋が建つたびに、検査員は「安全点検」(コンパイル)を実行します。壁が曲がっていたり、配管が漏れていたり(コードエラー)する場合、ビルダーは次に進む前に即座に修正します。
- 安全責任者: 特に関し「安全でない」ショートカットをチェックします。Rust は絶対に必要な場合のみ unsafe コードを許可しますが、この責任者はそれらを排除しようとし、最終的な建物が要塞であることを保証します。
3. 「品質管理」フェーズ(ダブルチェック)
ここで RustPrint は非常に賢くなります。建物が完成したと信じるだけでなく、元のものに対して検証を行います。
- 「鏡」チェック: 新しい Rust 建物が完成した後、AI は Rust 版の新しい取扱説明書を作成します。その後、この新しいマニュアルを元の C マニュアルと比較します。
- 新しいマニュアルにセクション(例:「秘密のトンネル」)が欠けている場合、AI は機能を見落としたことを認識し、修正するために戻ります。
- 「ストレステスト」: AI は元のテスト(城壁のストレステストのようなもの)を取得し、新しい Rust 建物で実行します。テスト中に壁が割れる場合、AI は単にパッチを当てるのではなく、なぜ壁が割れたのかを突き止め、根本的な設計上の欠陥を修正します。
結果:機能しましたか?
研究者たちは、8 つの現実世界の大規模 C プロジェクト(小規模なライブラリから 80,000 行を超える巨大なシステムまで)で RustPrint をテストしました。
- 競合他社: 他のツール(C2Rust や単純な AI 翻訳機など)もこれを行おうとしましたが、失敗しました。ビルドを完了できず(コードがコンパイルされない)、または Rust に見えるが穴だらけの構造を構築してしまいました。
- RustPrint の成功:
- 仕事を完了: RustPrint は、すべてのプロジェクトの動作可能でコンパイル可能なバージョンを正常に構築しました。
- 機能を維持: 使用された AI モデルに応じて、元の機能の**93% から 97%**を保持しました。他の方法は約 50% しか保持できませんでした。
- テストに合格: 新しいコードで元のテストを実行した際、RustPrint は**95% から 98%**のテストに合格しました。他の方法は大幅に失敗する頻度が高かったのです。
- 安全: 生成されたコードは「安全でない」ショートカットがほぼ完全に排除されており、以前の試行よりもはるかに安全でした。
結論
RustPrint は、巨大で複雑なソフトウェアシステムを移行するには、単なる翻訳者ではなく、建築家である必要があることを証明しています。AI にまず「設計図」を作成させ、計画を比較し、ストレステストを実行させることで、RustPrint は元のシステムの魂を失うことなく、レガシーな C コードを安全で現代的な Rust の世界へ成功裏に移行させることができます。
注:この論文はコードの技術的な移行に厳密に焦点を当てています。この方法が生命に関わる医療機器への即時使用に適しているとか、すべてのソフトウェア問題を解決するとかは主張していません。むしろ、大規模な C コードベースを Rust に翻訳するという特定のタスクに対して、非常に効果的なツールであることを示しています。
自分の分野の論文に埋もれていませんか?
研究キーワードに一致する最新の論文のダイジェストを毎日受け取りましょう——技術要約付き、あなたの言語で。