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

Canonical source: https://maguyva.ai/uk/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`.

## Наступні кроки

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

## Деталі рушія

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

## Корисні точки входу MCP

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