Hoppa till innehåll
cd /languages
  • Kod med hög integritet
  • Programmering
  • Stöd för AST och symboler

Ada i Maguyva: specifikationer, kroppar och paketgrafer

Maguyva stöder Ada med AST, symboler och graf, så att AI-agenter kan följa paketspecifikationer, kroppar, tasks och taggade typer i långlivade Ada-system.

Varför Ada-repon behöver en beroendekarta

Ada skiljer det ett paket lovar (.ads) från hur det gör det (.adb). Det är god ingenjörskonst, och det betyder också att en enda ändring berör flera filer som en textsökning inte kopplar ihop åt dig. Långlivade Ada-system lägger till ytterligare ett lager: generics, taggade typer, tasks och skyddade objekt, vars relationer betyder mer än någon enskild fil.

Maguyva ger agenten den beroendekartan innan den föreslår en ändring, vilket är exakt den ordning som en granskning med hög integritet förväntar sig.

Vad Maguyva extraherar i Ada

Maguyva täcker .ads, .adb och .ada. Underprogramkroppar samt procedur- och funktionsspecifikationer extraheras som anropbara symboler, så både specifikationen och kroppen för en rutin är sökbara. Symbolmatchningen är skiftlägesokänslig, precis som Ada självt.

Importer kommer från with- och use-satser; nyckelordet tas bort så att grafen lagrar paketnamnet. Grafen registrerar också anrop, arv och överskrivningar för taggade typer, instansiering, typreferenser, läsningar och skrivningar samt kanter för att kasta och hantera undantag.

I strukturell sökning kan task-typer, skyddade typer, posttyper och gränssnittstyper väljas som typdefinitioner, och entry-kroppar som metoder.

Exempel på prompter för agenter

  • “Vilka enheter beror på Flight_Control.Sensors, och vilka av dess underprogram anropar de?” (dependency_search incoming)
  • “Visa specifikationen och kroppen för Compute_Trajectory och alla som anropar den.” (find_symbol)
  • “Förklara hur telemetritasken lämnar data till det skyddade loggningsobjektet.” (get_task_context)

Kända begränsningar

  • Ada använder samma syntax för vissa anrop, åtkomst till postfält och indexering. Maguyva filtrerar inbyggda typer, paket i standardbiblioteket, attributfunktioner och operatorer (omkring 113 mönster) för att hålla anropsgrafen ren, så anrop till standardbiblioteket blir inte kanter i grafen. Åtkomst till postfält och indexering skiljs från anrop utifrån deras position i grammatiken, inte utifrån en lista med fältnamn. Vanliga text-I/O-anrop som Put_Line, Put och Get behålls avsiktligt.
  • use-satser ändrar synligheten men väljs inte som importer i strukturell sökning; with-satser gör det.
  • Noder för post- och gränssnittstyper kan vara anonyma fragment, så namnbaserade strukturella frågor kan missa dem. Använd find_symbol för namngivna typer.

Nästa steg

Anslut ett repo med snabbstarten och kontrollera sedan stödmatrisen på kompatibilitetssidan. Om din Ada-kod binder till C, läs även guiden för C.

Bäst lämpad för

  • > Team som underhåller långlivad Ada inom flyg och rymd, försvar, järnväg eller andra områden med hög integritet där varje ändring granskas.
  • > Kodbaser som är uppdelade i `.ads`-specifikationer och `.adb`-kroppar, där gränssnitt och implementation ligger i olika filer.
  • > Ingenjörer som använder AI-agenter för konsekvensanalys och granskningsförberedelse, inte för ogranskad kodgenerering.

Agentarbetsflöden

  • > Hitta alla enheter som gör `with` på ett paket innan dess specifikation ändras.
  • > Spåra över paketgränser vilka underprogram som anropar en rutin.
  • > Kartlägga task-typer, skyddade typer och hierarkier av taggade typer före en ändring av samtidighet eller design.

Motordetaljer

  • > Ada-stödet täcker `.ads`-specifikationer, `.adb`-kroppar och `.ada`. Underprogramkroppar och -specifikationer är båda anropbara symboler.
  • > Symbolmatchningen är skiftlägesokänslig, och `with`- och `use`-satser blir importrelationer när nyckelordet tagits bort.
  • > Omkring 113 inbyggda typer, paket i standardbiblioteket, attributfunktioner och operatorer filtreras bort ur anropen; åtkomst till postfält och indexering skiljs från anrop utifrån deras position i grammatiken, och `Put_Line`, `Put` och `Get` behålls avsiktligt.

Användbara MCP-ingångar

  • find_symbol

    Använd det för att hitta specifikationen och kroppen för ett underprogram tillsammans med referenserna.

  • dependency_search

    Använd incoming-traversering på ett paket innan dess specifikation ändras för att se alla beroende enheter.

  • get_task_context

    Använd det för prompter som "förklara hur telemetritasken lämnar data till det skyddade loggningsobjektet".