跳转到内容
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

    适用于“追踪求解器循环中边界条件是如何施加的”这类提示词。