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

Canonical source: https://maguyva.ai/ru/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 поддерживает Fortran с AST, символами и графом, чтобы ИИ-агенты отслеживали подпрограммы, модули и производные типы до изменения численного кода.

## Сводка поддержки

- Уровень: Поддержка AST и символов
- Программирование
- Расширения: .f, .f03, .f08, .f90, .f95, .for, +ещё 1
- Настоящий AST-разбор для синтаксически осведомлённого поиска и структурного контекста.
- Именованные символы обеспечивают семантический поиск и перекрёстные ссылки. Навигация по графу доступна, когда включено извлечение связей.
- Этот язык добавляет символы и связи в поиск с учётом графа; поддерживаемые типы рёбер зависят от присущих ему конструкций.
- Доступны и AST-разбор, и извлечение символов.

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

- Исследовательские, инженерные и HPC-команды, которые сопровождают решатели, симуляции и численные библиотеки на Fortran, которые старше нынешней команды.
- Репозитории, где файлы `.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 встроенных процедур (операторы ввода-вывода, математические процедуры, процедуры для массивов, строк, преобразования типов и работы с битами), поэтому оставшиеся рёбра указывают на ваш собственный код.

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

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

## Следующие шаги

Подключите репозиторий по [быстрому старту](/ru/docs/quickstart), затем изучите полную матрицу поддержки на [странице совместимости](/ru/docs/compatibility). Если ваш Fortran соседствует со связующим кодом на C, прочитайте и [руководство по C](/ru/languages/c).

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

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

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

- `find_symbol`: Начните с имени подпрограммы, функции или модуля; сопоставление, как и в Fortran, не учитывает регистр.
- `dependency_search`: Используйте обход incoming для процедуры решателя или общего модуля, чтобы увидеть всех вызывающих до численного изменения.
- `get_task_context`: Используйте для промптов вроде «проследи, как в цикле решателя применяются граничные условия».
