Ada è un linguaggio di programmazione di alto livello e strutturato, progettato principalmente per la programmazione di sistemi e applicazioni in tempo reale. È stato nominato in onore di Ada Lovelace, spesso accreditata come una delle prime programmatrici informatiche. Ada è conosciuta per il suo forte typing, modularità e supporto per la programmazione concorrente, rendendola adatta per sistemi critici in settori come l'aerospaziale, l'automotive e la difesa.
Ada è stata creata alla fine degli anni '70 sotto un progetto finanziato dal Dipartimento della Difesa degli Stati Uniti (DoD) per affrontare la necessità di un linguaggio di programmazione standardizzato per sistemi embedded e in tempo reale. Il linguaggio è stato progettato da un team guidato da Jean Ichbiah ed è stato ufficialmente rilasciato nel 1983. Uno degli obiettivi principali era ridurre la diversità dei linguaggi di programmazione utilizzati nei sistemi di difesa, migliorando così la manutenzione e l'affidabilità.
Ada trae ispirazione da diversi linguaggi di programmazione, tra cui Pascal, C e ALGOL. Il suo design incorpora caratteristiche di questi linguaggi, come il forte typing e la programmazione strutturata. Lo sviluppo di Ada ha anche risposto alle sfide poste da C, in particolare in termini di sicurezza dei tipi e supporto per la programmazione a livello di sistema.
Dalla sua nascita, Ada ha subito diverse revisioni, con Ada 83 seguita da Ada 95, Ada 2005 e l'ultima versione standard, Ada 2012. Queste revisioni hanno introdotto nuove funzionalità, come la programmazione orientata agli oggetti e un miglior supporto per i sistemi in tempo reale. Oggi, Ada è mantenuta dall'Ada Resource Association e continua ad essere utilizzata, in particolare nei sistemi critici dove la sicurezza e l'affidabilità sono fondamentali.
Ada impone un rigoroso controllo dei tipi, che aiuta a catturare errori al momento della compilazione piuttosto che a runtime.
type Integer_Type is range 0 .. 100;
variable Count : Integer_Type;
Count := 50; -- Questo è valido
Count := 150; -- Questo causerà un errore di compilazione
Il linguaggio supporta la programmazione modulare attraverso l'uso di pacchetti, che racchiudono tipi, dati e procedure correlati.
package Geometry is
type Point is record
X : Float;
Y : Float;
end record;
procedure Move(Point : in out Point; DeltaX, DeltaY : Float);
end Geometry;
Ada ha un supporto integrato per la programmazione concorrente tramite task, che consente l'esecuzione simultanea di più processi.
task My_Task is
begin
-- codice del task
end My_Task;
Ada fornisce meccanismi robusti per la gestione delle eccezioni, consentendo agli sviluppatori di gestire gli errori a runtime in modo elegante.
begin
-- codice che potrebbe sollevare un'eccezione
exception
when Constraint_Error =>
-- gestire l'errore
end;
Ada supporta la programmazione orientata agli oggetti con caratteristiche come l'ereditarietà e il polimorfismo.
type Vehicle is tagged null record;
type Car is new Vehicle with record
Doors : Integer;
end record;
procedure Display(V : Vehicle) is
begin
-- codice per visualizzare le informazioni del veicolo
end Display;
I generici consentono agli sviluppatori di scrivere codice flessibile e riutilizzabile definendo tipi e subprogrammi parametrizzati.
generic
type Item_Type is private;
package Container is
procedure Add(Item : Item_Type);
end Container;
Ada supporta i tipi enumerati, che definiscono un tipo con un insieme di valori nominati.
type Color is (Red, Green, Blue);
I tipi controllati consentono un controllo fine sulla creazione e distruzione degli oggetti.
type My_Controlled_Type is new Ada.Finalization.Controlled with record
Value : Integer;
end record;
Ada fornisce attributi che possono essere utilizzati per ottenere informazioni sui tipi o sugli oggetti.
X : Integer := 10;
Size : Natural := X'Size; -- Ottenere la dimensione di un intero
Ada enfatizza il concetto di gestione della memoria attraverso il controllo esplicito sullo stoccaggio e l'allocazione dei dati.
declare
type Record_Type is record
A : Integer;
B : Float;
end record;
My_Record : Record_Type;
end;
Ada può essere compilata utilizzando vari compilatori, con GNAT che è uno dei più utilizzati. GNAT fa parte della GNU Compiler Collection (GCC) e fornisce un modo gratuito e open-source per compilare codice Ada.
Esistono diversi ambienti di sviluppo integrati (IDE) disponibili per Ada, come GNAT Studio, AdaGIDE e GPS (GNAT Programming Studio). Questi strumenti offrono funzionalità come evidenziazione della sintassi, completamento del codice e capacità di debug.
Per costruire un progetto Ada utilizzando GNAT, di solito si scrive il codice sorgente Ada e poi si utilizzano i seguenti comandi nel terminale:
gnatmake my_program.adb
Questo comando compila il file sorgente Ada e genera un eseguibile.
Ada è utilizzata prevalentemente in sistemi critici per la sicurezza, che includono, ma non si limitano a:
La sua affidabilità e manutenibilità la rendono una scelta preferita in questi settori.
Sebbene Ada condivida alcune somiglianze con altri linguaggi di programmazione, si distingue per la sua enfasi sulla sicurezza e sull'affidabilità.
Quando si tratta di traduzione da codice a codice, ci sono strumenti specifici che possono aiutare a convertire il codice Ada in altri linguaggi di programmazione. Ad esempio, strumenti come Gnat2Go possono essere utilizzati per tradurre il codice Ada in Go. Tuttavia, è necessario prestare attenzione per garantire che la funzionalità e le caratteristiche di sicurezza del codice Ada originale siano preservate durante il processo di traduzione.
Alcuni strumenti comuni per la traduzione da codice a codice includono: