# Ada в Maguyva: спецификации, тела и графы пакетов

Canonical source: https://maguyva.ai/ru/languages/ada

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 поддерживает Ada с AST, символами и графом, чтобы ИИ-агенты отслеживали спецификации пакетов, тела, задачи и теговые типы в долгоживущих системах на Ada.

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

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

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

- Команды, которые сопровождают давний код на Ada в авиакосмической отрасли, обороне, на железной дороге и в других областях высокой надёжности, где каждое изменение проходит ревью.
- Кодовые базы, разделённые на спецификации `.ads` и тела `.adb`, где интерфейс и реализация лежат в разных файлах.
- Инженеры, которые используют ИИ-агентов для анализа влияния и подготовки ревью, а не для генерации кода без проверки.

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

- Найти все модули, которые подключают пакет через `with`, прежде чем менять его спецификацию.
- Проследить через границы пакетов, какие подпрограммы вызывают процедуру.
- Составить карту типов задач, защищённых типов и иерархий теговых типов перед изменением параллелизма или архитектуры.

## Почему репозиториям на Ada нужна карта зависимостей

Ada отделяет то, что пакет обещает (`.ads`), от того, как он это выполняет (`.adb`). Это хорошая инженерия, и вместе с тем одно изменение затрагивает несколько файлов, которые текстовый поиск за вас не свяжет. Долгоживущие системы на Ada добавляют ещё один слой: обобщения, теговые типы, задачи и защищённые объекты, связи между которыми важнее любого отдельного файла.

Maguyva даёт агенту эту карту зависимостей до того, как он предложит правку, — именно в том порядке, которого ожидает ревью высокой надёжности.

## Что Maguyva извлекает из Ada

Maguyva охватывает `.ads`, `.adb` и `.ada`. Тела подпрограмм, а также спецификации процедур и функций извлекаются как вызываемые символы, поэтому искать можно и спецификацию процедуры, и её тело. Сопоставление символов не учитывает регистр — как и сама Ada.

Импорты строятся из предложений `with` и `use`; ключевое слово удаляется, и в графе сохраняется имя пакета. Граф также фиксирует вызовы, наследование и переопределения для теговых типов, создание экземпляров, ссылки на типы, чтения и записи, а также рёбра возбуждения и обработки исключений.

В структурном поиске типы задач, защищённые типы, типы записей и интерфейсные типы можно выбрать как определения типов, а тела входов — как методы.

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

- «Какие модули зависят от `Flight_Control.Sensors` и какие его подпрограммы вызывают?» (`dependency_search` incoming)
- «Покажи спецификацию и тело `Compute_Trajectory` и всех вызывающих.» (`find_symbol`)
- «Объясни, как задача телеметрии передаёт данные защищённому объекту журналирования.» (`get_task_context`)

## Известные ограничения

- В Ada часть вызовов, обращения к полям записей и индексация имеют одинаковый синтаксис. Чтобы граф вызовов оставался чистым, Maguyva фильтрует встроенные типы, пакеты стандартной библиотеки, функции атрибутов и операторы (около 113 шаблонов), поэтому вызовы стандартной библиотеки не становятся рёбрами графа. Обращения к полям записей и индексация отличаются от вызовов по их позиции в грамматике, а не по списку имён полей. Распространённые вызовы текстового ввода-вывода, такие как `Put_Line`, `Put` и `Get`, сохраняются намеренно.
- Предложения `use` меняют видимость, но в структурном поиске не выбираются как импорты; предложения `with` — выбираются.
- Узлы типов записей и интерфейсов могут быть анонимными фрагментами, поэтому структурные запросы по имени могут их пропустить. Для именованных типов используйте `find_symbol`.

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

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

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

- Поддержка Ada охватывает спецификации `.ads`, тела `.adb` и `.ada`. И тела, и спецификации подпрограмм являются вызываемыми символами.
- Сопоставление символов не учитывает регистр, а предложения `with` и `use` после удаления ключевого слова становятся связями импорта.
- Около 113 встроенных типов, пакетов стандартной библиотеки, функций атрибутов и операторов отфильтровываются из вызовов; обращения к полям записей и индексация отличаются от вызовов по их позиции в грамматике, а `Put_Line`, `Put` и `Get` сохраняются намеренно.

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

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