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

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

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

Почему репозиториям на 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.

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

Подключите репозиторий по быстрому старту, затем изучите матрицу поддержки на странице совместимости. Если ваш код на Ada связан с C, прочитайте и руководство по C.

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

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

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

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

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

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

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

  • find_symbol

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

  • dependency_search

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

  • get_task_context

    Используйте для промптов вроде «объясни, как задача телеметрии передаёт данные защищённому объекту журналирования».