# Ada in Maguyva: specifiche, corpi e grafi dei package

Canonical source: https://maguyva.ai/it/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 supporta Ada con AST, simboli e grafo, così gli agenti IA seguono specifiche, corpi, task e tipi tagged nei sistemi Ada di lunga durata.

## Istantanea del supporto

- Livello: Supporto AST e simboli
- Programmazione
- Estensioni: .ada, .adb, .ads
- Analisi AST reale per ricerca sintattica e contesto strutturale.
- I simboli nominati alimentano la ricerca semantica e i riferimenti incrociati. La navigazione del grafo è disponibile quando è abilitata l’estrazione delle relazioni.
- Questo linguaggio contribuisce con simboli e relazioni alla ricerca basata sul grafo; i tipi di arco supportati variano in base ai suoi costrutti nativi.
- Sono disponibili sia l’analisi AST sia l’estrazione dei simboli.

## Il più adatto per

- Team che mantengono Ada di lunga data in aerospazio, difesa, ferrovie o altri ambiti ad alta integrità in cui ogni modifica viene revisionata.
- Basi di codice divise tra specifiche `.ads` e corpi `.adb`, dove interfaccia e implementazione stanno in file diversi.
- Ingegneri che usano agenti IA per l'analisi d'impatto e la preparazione delle revisioni, non per generare codice senza revisione.

## Workflow degli agenti

- Trovare tutte le unità che fanno `with` di un package prima di modificarne la specifica.
- Tracciare quali sottoprogrammi chiamano una routine attraverso i confini dei package.
- Mappare tipi task, tipi protetti e gerarchie di tipi tagged prima di una modifica di concorrenza o di design.

## Perché i repository Ada hanno bisogno di una mappa delle dipendenze

Ada separa ciò che un package promette (`.ads`) da come lo realizza (`.adb`). È buona ingegneria, e significa anche che una singola modifica tocca più file che una ricerca testuale non collegherà per te. I sistemi Ada di lunga durata aggiungono un altro livello: generici, tipi tagged, task e oggetti protetti, le cui relazioni contano più di qualsiasi singolo file.

Maguyva fornisce questa mappa delle dipendenze all'agente prima che proponga una modifica, che è esattamente l'ordine atteso da una revisione ad alta integrità.

## Cosa estrae Maguyva in Ada

Maguyva copre `.ads`, `.adb` e `.ada`. I corpi dei sottoprogrammi e le specifiche di procedure e funzioni vengono estratti come simboli invocabili, così sia la specifica sia il corpo di una routine sono ricercabili. Il confronto dei simboli non distingue maiuscole e minuscole, come Ada stesso.

Gli import derivano dalle clausole `with` e `use`, con la parola chiave rimossa così che il grafo memorizzi il nome del package. Il grafo registra anche chiamate, ereditarietà e override sui tipi tagged, istanziazione, riferimenti di tipo, letture e scritture, e archi di sollevamento e gestione delle eccezioni.

Nella ricerca strutturale, tipi task, tipi protetti, tipi record e tipi interfaccia si possono selezionare come definizioni di tipo, e i corpi delle entry come metodi.

## Esempi di prompt per agenti

- "Quali unità dipendono da `Flight_Control.Sensors` e quali suoi sottoprogrammi chiamano?" (`dependency_search` incoming)
- "Mostra specifica e corpo di `Compute_Trajectory` e tutti i chiamanti." (`find_symbol`)
- "Spiega come il task di telemetria passa i dati all'oggetto protetto di logging." (`get_task_context`)

## Limiti noti

- Ada usa la stessa sintassi per alcune chiamate, l'accesso ai campi dei record e l'indicizzazione. Maguyva filtra tipi predefiniti, package della libreria standard, funzioni di attributo e operatori (circa 113 pattern) per mantenere pulito il grafo delle chiamate, quindi le chiamate alla libreria standard non sono archi del grafo. L'accesso ai campi dei record e l'indicizzazione si distinguono dalle chiamate in base alla loro posizione nella grammatica, non a un elenco di nomi di campo. Le chiamate comuni di I/O testuale come `Put_Line`, `Put` e `Get` vengono mantenute di proposito.
- Le clausole `use` cambiano la visibilità ma non vengono selezionate come import nella ricerca strutturale; le clausole `with` sì.
- I nodi dei tipi record e interfaccia possono essere frammenti anonimi, quindi le query strutturali basate sul nome possono non trovarli. Usa `find_symbol` per i tipi con nome.

## Prossimi passi

Collega un repository con la [guida rapida](/it/docs/quickstart), poi consulta la matrice di supporto nella [pagina di compatibilità](/it/docs/compatibility). Se il tuo codice Ada si interfaccia con C, leggi anche la [guida a C](/it/languages/c).

## Dettagli del motore

- Il supporto ad Ada copre specifiche `.ads`, corpi `.adb` e `.ada`. Corpi e specifiche dei sottoprogrammi sono entrambi simboli invocabili.
- Il confronto dei simboli non distingue maiuscole e minuscole, e le clausole `with` e `use` diventano relazioni di import dopo la rimozione della parola chiave.
- Circa 113 tipi predefiniti, package della libreria standard, funzioni di attributo e operatori vengono filtrati dalle chiamate; l'accesso ai campi dei record e l'indicizzazione si distinguono dalle chiamate in base alla loro posizione nella grammatica, e `Put_Line`, `Put` e `Get` vengono mantenuti di proposito.

## Punti di ingresso MCP utili

- `find_symbol`: Usalo per trovare insieme specifica e corpo di un sottoprogramma, con i riferimenti.
- `dependency_search`: Usa la navigazione incoming su un package prima di modificarne la specifica per vedere tutte le unità che ne dipendono.
- `get_task_context`: Usalo per prompt come "spiega come il task di telemetria passa i dati all'oggetto protetto di logging".
