本文へスキップ
cd /languages
  • 科学技術の遺産
  • プログラミング
  • AST・シンボル対応

MaguyvaのFortran対応: 科学技術コードのためのコードグラフ

MaguyvaはAST、シンボル、グラフでFortranに対応しています。AIエージェントは数値計算コードを変更する前に、サブルーチン、モジュール、派生型をたどれます。

Fortranに必要なのは文字列マッチではなく構造

Fortranのコードベースは、古く、大きく、ソフトウェアチームではなく分野の専門家によって書かれていることがよくあります。SOLVE、Solve、solve という名前のルーチンはすべて同じルーチンです。モジュールは数百のファイルで共有され、組み込み手続きのライブラリも大きいため、素朴な呼び出し一覧はほとんどが SQRT、SUM、WRITE で埋まります。

grepしか使わないエージェントは、このノイズに埋もれてしまいます。Maguyvaはまず構造を渡します。どのプログラム単位が存在し、どのモジュールを使い、どのユーザールーチンが互いに呼び出しているのかです。

MaguyvaがFortranで抽出するもの

Maguyvaは固定形式と自由形式のソース(.f、.for、.ftn、.f90、.f95、.f03、.f08)に対応しています。関数とサブルーチンは呼び出し可能なシンボルとして抽出され、派生型は構造検索で型定義として選択できます。

シンボルの照合はFortran自身の規則に合わせて大文字と小文字を区別しません。インポート関係は use と include から作られ、キーワードを取り除いてモジュール名をグラフに保存します。呼び出し、読み取り、代入、型参照、そして拡張された派生型からの継承もグラフに含まれます。

関係性フィルターは約165個の組み込み手続き(I/O文、数学、配列、文字列、型変換、ビット操作のルーチン)を除外するため、残るエッジはあなた自身のコードを指します。

エージェントへのプロンプト例

  • 「compute_flux を呼び出すサブルーチンはどれで、それぞれどのモジュールを使っているか?」(find_symbol、次に dependency_search の incoming)
  • 「ソルバーループで境界条件がどのように適用されているかを追跡して。」(get_task_context)
  • 「constants モジュールを使うプログラム単位をすべて見つけて。」(text_pattern_search で use constants を検索し、次に find_symbol)

既知の制限

  • Fortranにはデコレーターも例外処理もないため、それらの関係タイプは適用対象外としてマークされています。
  • 型束縛手続きは、通常の関数やサブルーチンと同じノードを共有します。structural_search では functions プリセットを使ってください。methods プリセットはFortranのノードを選択しません。
  • 除外された組み込み手続きへの呼び出しはグラフのエッジとして現れません。すべての WRITE や OPEN が必要なときは text_pattern_search を使ってください。

次のステップ

クイックスタートでリポジトリを接続し、互換性ページで完全な対応マトリクスを確認してください。FortranがCのグルーコードと並んでいる場合は、Cガイドもご覧ください。

最適な用途

  • > 現在のチームより古いFortranのソルバー、シミュレーション、数値ライブラリを保守する研究・エンジニアリング・HPCチーム。
  • > 固定形式の `.f` ファイルと自由形式の `.f90` 以降のモジュールが混在し、CやPythonのラッパーが並ぶことも多いリポジトリ。
  • > 数値計算の変更前に、共有モジュールに触れるサブルーチンを洗い出すことが最初の仕事になる、エージェント支援型のレビュー。

エージェントワークフロー

  • > ソルバールーチンの引数や単位を変更する前に、それを呼び出すサブルーチンと関数をたどる。
  • > プログラム単位が `use` で取り込むモジュールを一覧にし、その定義までたどる。
  • > 派生型がどこで宣言され、どの手続きがそれを扱っているかを見つける。

エンジンの詳細

  • > Fortranの対応は固定形式と自由形式のソースを含みます: `.f`、`.for`、`.ftn`、`.f90`、`.f95`、`.f03`、`.f08`。
  • > 関数とサブルーチンは呼び出し可能なシンボルであり、シンボルの照合は大文字と小文字を区別せず、`use` と `include` はインポートの関係になります。
  • > 約165個の組み込み手続き(I/O、数学、配列、文字列、型変換、ビットのルーチン)は関係性から除外されます。デコレーターと例外の関係は適用対象外としてマークされています。

役立つMCPエントリーポイント

  • find_symbol

    サブルーチン、関数、モジュールの名前から始めてください。照合はFortranと同じく大文字と小文字を区別しません。

  • dependency_search

    数値計算の変更前に、ソルバーや共有モジュールのルーチンに対してincomingのトラバーサルを使い、すべての呼び出し元を確認してください。

  • get_task_context

    「ソルバーループで境界条件がどのように適用されているかを追跡して」のようなプロンプトに使ってください。