Перейти до вмісту
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

    Використовуйте для промптів на кшталт «поясни, як задача телеметрії передає дані захищеному об'єкту журналювання».