# Maguyva 的 Fortran 支持：面向科学计算代码库的代码图谱

Canonical source: https://maguyva.ai/zh-hans/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-hans/docs/quickstart)连接仓库，然后在[兼容性页面](/zh-hans/docs/compatibility)查看完整的支持矩阵。如果 Fortran 与 C 胶水代码并存，也请阅读 [C 指南](/zh-hans/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`: 适用于“追踪求解器循环中边界条件是如何施加的”这类提示词。
