# Maguyva 對 Fortran 的支援：科學運算程式碼庫的程式碼圖譜

Canonical source: https://maguyva.ai/zh-hant/languages/fortran

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Maguyva 以 AST、符號與圖譜支援 Fortran，讓 AI 代理在修改數值程式碼之前，就能追蹤副程式、模組與衍生型別。

## 支援概況

- 等級: AST 與符號支援
- 程式語言
- 副檔名: .f, .f03, .f08, .f90, .f95, .for, 還有 1 個
- 真正的 AST 剖析，支援語法感知搜尋與結構化情境。
- 具名符號支援語意查詢與交叉參照。啟用關係擷取後，即可使用圖譜導覽。
- 這個語言會為圖譜感知搜尋提供符號與關係；支援的邊類型會隨其原生構造而異。
- 同時支援 AST 剖析與符號擷取。

## 最適合的情境

- 維護 Fortran 求解器、模擬程式或數值函式庫的研究、工程與 HPC 團隊，這些程式碼往往比現任團隊還要資深。
- 固定格式的 `.f` 檔案與自由格式的 `.f90` 及之後的模組混在一起的儲存庫，旁邊常常還有 C 或 Python 包裝層。
- 由代理輔助的審查工作：在修改數值邏輯之前，第一步是釐清哪些副程式會碰到某個共用模組。

## 代理工作流程

- 在變更求解器常式的參數或單位之前，追蹤有哪些副程式與函式呼叫了它。
- 列出某個程式單元透過 `use` 引入的模組，並一路追到它們的定義。
- 找出衍生型別在哪裡宣告，以及哪些程序在使用它。

## 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`。

## 下一步

透過[快速入門](/zh-hant/docs/quickstart)連接儲存庫，然後在[相容性頁面](/zh-hant/docs/compatibility)查看完整的支援矩陣。如果 Fortran 與 C 膠水程式碼並存，也請閱讀 [C 指南](/zh-hant/languages/c)。

## 引擎細節

- Fortran 支援涵蓋固定格式與自由格式原始碼：`.f`、`.for`、`.ftn`、`.f90`、`.f95`、`.f03` 與 `.f08`。
- 函式與副程式是可呼叫的符號，符號比對不區分大小寫，`use` 與 `include` 會成為匯入關係。
- 約 165 個內建程序（I/O、數學、陣列、字串、型別轉換與位元常式）會從關係中過濾掉。裝飾器與例外關係被標記為不適用。

## 實用的 MCP 進入點

- `find_symbol`: 從副程式、函式或模組名稱開始；比對不區分大小寫，與 Fortran 一致。
- `dependency_search`: 在修改數值邏輯之前，對求解器或共用模組常式使用 incoming 走訪，查看所有呼叫端。
- `get_task_context`: 適合用於「追蹤求解器迴圈中邊界條件是如何套用的」這類提示。
