Перейти к содержимому
cd /languages
  • Научное наследие
  • Программирование
  • Поддержка AST и символов

Fortran в Maguyva: графы кода для научных кодовых баз

Maguyva поддерживает Fortran с AST, символами и графом, чтобы ИИ-агенты отслеживали подпрограммы, модули и производные типы до изменения численного кода.

Почему Fortran нужна структура, а не поиск по строкам

Кодовые базы на Fortran обычно старые, большие и написаны специалистами предметной области, а не командами разработчиков. Процедуры с именами SOLVE, Solve и solve — это одна и та же процедура. Модули используются сотнями файлов, а библиотека встроенных процедур настолько велика, что наивный список вызовов в основном состоит из SQRT, SUM и WRITE.

Агент, который умеет только grep, тонет в этом шуме. Maguyva сначала даёт ему структуру: какие программные единицы существуют, какие модули они используют и какие пользовательские процедуры вызывают друг друга.

Что Maguyva извлекает из Fortran

Maguyva охватывает исходный код в фиксированной и свободной форме (.f, .for, .ftn, .f90, .f95, .f03, .f08). Функции и подпрограммы извлекаются как вызываемые символы, а производные типы можно выбрать как определения типов в структурном поиске.

Сопоставление символов не учитывает регистр — как и сам Fortran. Связи импорта строятся из use и include; ключевое слово удаляется, и в графе сохраняется имя модуля. Вызовы, чтения, присваивания, ссылки на типы и наследование расширенных производных типов тоже входят в граф.

Фильтр связей отбрасывает около 165 встроенных процедур (операторы ввода-вывода, математические процедуры, процедуры для массивов, строк, преобразования типов и работы с битами), поэтому оставшиеся рёбра указывают на ваш собственный код.

Примеры промптов для агентов

  • «Какие подпрограммы вызывают 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.

Лучше всего подходит

  • > Исследовательские, инженерные и HPC-команды, которые сопровождают решатели, симуляции и численные библиотеки на Fortran, которые старше нынешней команды.
  • > Репозитории, где файлы `.f` в фиксированной форме соседствуют с модулями `.f90` и новее в свободной форме, часто рядом с обёртками на C или Python.
  • > Ревью с участием агентов, где сначала нужно понять, какие подпрограммы затрагивают общий модуль, прежде чем менять численную логику.

Сценарии работы агента

  • > Найти подпрограммы и функции, которые вызывают процедуру решателя, прежде чем менять её аргументы или единицы.
  • > Перечислить модули, которые программная единица подключает через `use`, и перейти к их определениям.
  • > Найти, где объявлен производный тип и какие процедуры с ним работают.

Детали движка

  • > Поддержка Fortran охватывает исходный код в фиксированной и свободной форме: `.f`, `.for`, `.ftn`, `.f90`, `.f95`, `.f03` и `.f08`.
  • > Функции и подпрограммы — вызываемые символы, сопоставление символов не учитывает регистр, а `use` и `include` становятся связями импорта.
  • > Около 165 встроенных процедур (ввод-вывод, математика, массивы, строки, преобразование типов и биты) отфильтровываются из связей. Связи декораторов и исключений помечены как неприменимые.

Полезные точки входа MCP

  • find_symbol

    Начните с имени подпрограммы, функции или модуля; сопоставление, как и в Fortran, не учитывает регистр.

  • dependency_search

    Используйте обход incoming для процедуры решателя или общего модуля, чтобы увидеть всех вызывающих до численного изменения.

  • get_task_context

    Используйте для промптов вроде «проследи, как в цикле решателя применяются граничные условия».