Przejdź do treści
cd /languages
  • Kod wysokiej niezawodności
  • Programowanie
  • Obsługa AST i symboli

Ada w Maguyva: specyfikacje, treści i grafy pakietów

Maguyva obsługuje Adę przez AST, symbole i graf, dzięki czemu agenci AI śledzą specyfikacje pakietów, treści, zadania i typy znakowane w długowiecznych systemach Ady.

Dlaczego repozytoria Ady potrzebują mapy zależności

Ada oddziela to, co pakiet obiecuje (.ads), od tego, jak to realizuje (.adb). To dobra inżynieria, ale oznacza też, że jedna zmiana dotyka kilku plików, których wyszukiwanie tekstowe za Ciebie nie połączy. Długowieczne systemy w Adzie dodają kolejną warstwę: generyki, typy znakowane, zadania i obiekty chronione, których relacje są ważniejsze niż którykolwiek pojedynczy plik.

Maguyva daje agentowi tę mapę zależności, zanim zaproponuje on zmianę, czyli w kolejności, jakiej oczekuje przegląd w systemach wysokiej niezawodności.

Co Maguyva wyodrębnia w Adzie

Maguyva obejmuje .ads, .adb i .ada. Treści podprogramów oraz specyfikacje procedur i funkcji są wyodrębniane jako symbole wywoływalne, więc można wyszukać zarówno specyfikację, jak i treść procedury. Dopasowywanie symboli nie rozróżnia wielkości liter, tak jak sama Ada.

Importy pochodzą z klauzul with i use; słowo kluczowe jest usuwane, więc graf przechowuje nazwę pakietu. Graf zapisuje też wywołania, dziedziczenie i nadpisania w typach znakowanych, tworzenie instancji, odwołania do typów, odczyty i zapisy oraz krawędzie zgłaszania i obsługi wyjątków.

W wyszukiwaniu strukturalnym typy zadań, typy chronione, typy rekordowe i typy interfejsów można wybrać jako definicje typów, a treści wejść jako metody.

Przykładowe prompty dla agentów

  • „Które jednostki zależą od Flight_Control.Sensors i które z jego podprogramów wywołują?” (dependency_search incoming)
  • „Pokaż specyfikację i treść Compute_Trajectory oraz wszystkich wywołujących.” (find_symbol)
  • „Wyjaśnij, jak zadanie telemetrii przekazuje dane do chronionego obiektu logowania.” (get_task_context)

Znane ograniczenia

  • Ada używa tej samej składni dla niektórych wywołań, dostępu do pól rekordów i indeksowania. Maguyva filtruje typy wbudowane, pakiety biblioteki standardowej, funkcje atrybutów i operatory (około 113 wzorców), aby graf wywołań pozostał czysty, więc wywołania biblioteki standardowej nie są krawędziami grafu. Dostęp do pól rekordów i indeksowanie są odróżniane od wywołań na podstawie ich pozycji w gramatyce, a nie listy nazw pól. Typowe wywołania tekstowego wejścia/wyjścia, takie jak Put_Line, Put i Get, są celowo zachowywane.
  • Klauzule use zmieniają widoczność, ale w wyszukiwaniu strukturalnym nie są wybierane jako importy; klauzule with tak.
  • Węzły typów rekordowych i interfejsów mogą być anonimowymi fragmentami, więc zapytania strukturalne po nazwie mogą je pominąć. Dla typów nazwanych używaj find_symbol.

Kolejne kroki

Podłącz repozytorium za pomocą szybkiego startu, a potem sprawdź macierz obsługi na stronie zgodności. Jeśli Twój kod w Adzie łączy się z C, przeczytaj też przewodnik po C.

Najlepsze dopasowanie

  • > Zespoły utrzymujące długowieczną Adę w lotnictwie, obronności, kolejnictwie lub innych dziedzinach wysokiej niezawodności, gdzie każda zmiana przechodzi przegląd.
  • > Bazy kodu podzielone na specyfikacje `.ads` i treści `.adb`, w których interfejs i implementacja leżą w różnych plikach.
  • > Inżynierowie, którzy używają agentów AI do analizy wpływu i przygotowania przeglądów, a nie do generowania kodu bez weryfikacji.

Workflow agentów

  • > Znaleźć wszystkie jednostki, które wykonują `with` pakietu, zanim zmieni się jego specyfikacja.
  • > Prześledzić ponad granicami pakietów, które podprogramy wywołują daną procedurę.
  • > Zmapować typy zadań, typy chronione i hierarchie typów znakowanych przed zmianą współbieżności lub projektu.

Szczegóły silnika

  • > Obsługa Ady obejmuje specyfikacje `.ads`, treści `.adb` i `.ada`. Treści i specyfikacje podprogramów są symbolami wywoływalnymi.
  • > Dopasowywanie symboli nie rozróżnia wielkości liter, a klauzule `with` i `use` stają się relacjami importu po usunięciu słowa kluczowego.
  • > Około 113 typów wbudowanych, pakietów biblioteki standardowej, funkcji atrybutów i operatorów jest filtrowanych z wywołań; dostęp do pól rekordów i indeksowanie są odróżniane od wywołań na podstawie ich pozycji w gramatyce, a `Put_Line`, `Put` i `Get` są celowo zachowywane.

Przydatne punkty wejścia MCP

  • find_symbol

    Używaj go, aby znaleźć razem specyfikację i treść podprogramu wraz z odwołaniami.

  • dependency_search

    Użyj przejścia incoming na pakiecie przed zmianą jego specyfikacji, aby zobaczyć wszystkie zależne jednostki.

  • get_task_context

    Używaj go do promptów typu „wyjaśnij, jak zadanie telemetrii przekazuje dane do chronionego obiektu logowania”.