跳至主要內容
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

    適合用於「追蹤求解器迴圈中邊界條件是如何套用的」這類提示。