Ada is een high-level, gestructureerde programmeertaal die voornamelijk is ontworpen voor systeemprogrammering en real-time toepassingen. Het is vernoemd naar Ada Lovelace, die vaak wordt beschouwd als een van de eerste computerprogrammeurs. Ada staat bekend om zijn sterke typechecking, modulariteit en ondersteuning voor gelijktijdige programmering, waardoor het geschikt is voor kritische systemen in sectoren zoals de luchtvaart, de auto-industrie en defensie.
Ada werd in de late jaren 1970 gecreëerd onder een project gefinancierd door het Amerikaanse ministerie van Defensie (DoD) om te voldoen aan de behoefte aan een gestandaardiseerde programmeertaal voor embedded en real-time systemen. De taal werd ontworpen door een team onder leiding van Jean Ichbiah en werd officieel uitgebracht in 1983. Een van de belangrijkste doelstellingen was om de diversiteit aan programmeertalen die in defensiesystemen werd gebruikt te verminderen, waardoor onderhoud en betrouwbaarheid werden verbeterd.
Ada haalt inspiratie uit verschillende programmeertalen, waaronder Pascal, C en ALGOL. Het ontwerp omvat kenmerken van deze talen, zoals sterke typechecking en gestructureerde programmering. De ontwikkeling van Ada reageerde ook op de uitdagingen die door C werden gepresenteerd, met name op het gebied van typeveiligheid en ondersteuning voor systeemprogrammering.
Sinds de oprichting heeft Ada verschillende revisies ondergaan, waarbij Ada 83 werd gevolgd door Ada 95, Ada 2005 en de nieuwste standaard, Ada 2012. Deze revisies introduceerden nieuwe functies, zoals objectgeoriënteerd programmeren en verbeterde ondersteuning voor real-time systemen. Tegenwoordig wordt Ada onderhouden door de Ada Resource Association en blijft het worden gebruikt, vooral in kritische systemen waar veiligheid en betrouwbaarheid van het grootste belang zijn.
Ada handhaaft strikte typechecking, wat helpt om fouten tijdens de compilatietijd in plaats van tijdens de uitvoering op te sporen.
type Integer_Type is range 0 .. 100;
variable Count : Integer_Type;
Count := 50; -- Dit is geldig
Count := 150; -- Dit zal een compileertijdfout veroorzaken
De taal ondersteunt modulaire programmering door het gebruik van pakketten, die gerelateerde types, gegevens en procedures encapsuleren.
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 heeft ingebouwde ondersteuning voor gelijktijdige programmering via taken, wat de uitvoering van meerdere processen tegelijkertijd mogelijk maakt.
task My_Task is
begin
-- taakcode
end My_Task;
Ada biedt robuuste foutafhandelingsmechanismen, waarmee ontwikkelaars runtime-fouten op een elegante manier kunnen beheren.
begin
-- code die een uitzondering kan veroorzaken
exception
when Constraint_Error =>
-- behandel de fout
end;
Ada ondersteunt objectgeoriënteerd programmeren met functies zoals overerving en polymorfisme.
type Vehicle is tagged null record;
type Car is new Vehicle with record
Doors : Integer;
end record;
procedure Display(V : Vehicle) is
begin
-- code om voertuiginformatie weer te geven
end Display;
Generics stellen ontwikkelaars in staat om flexibele en herbruikbare code te schrijven door geparameteriseerde types en subprogramma's te definiëren.
generic
type Item_Type is private;
package Container is
procedure Add(Item : Item_Type);
end Container;
Ada ondersteunt enumeratietypes, die een type definiëren met een set benoemde waarden.
type Color is (Red, Green, Blue);
Gecontroleerde types bieden fijne controle over de creatie en vernietiging van objecten.
type My_Controlled_Type is new Ada.Finalization.Controlled with record
Value : Integer;
end record;
Ada biedt attributen die kunnen worden gebruikt om informatie over types of objecten te verkrijgen.
X : Integer := 10;
Size : Natural := X'Size; -- De grootte van een integer verkrijgen
Ada benadrukt het concept van geheugenbeheer door expliciete controle over gegevensopslag en -allocatie.
declare
type Record_Type is record
A : Integer;
B : Float;
end record;
My_Record : Record_Type;
end;
Ada kan worden gecompileerd met verschillende compilers, waarbij GNAT een van de meest gebruikte is. GNAT maakt deel uit van de GNU Compiler Collection (GCC) en biedt een gratis en open-source manier om Ada-code te compileren.
Er zijn verschillende geïntegreerde ontwikkelomgevingen (IDE's) beschikbaar voor Ada, zoals GNAT Studio, AdaGIDE en GPS (GNAT Programming Studio). Deze tools bieden functies zoals syntaxisaccentuering, code-aanvulling en debugmogelijkheden.
Om een Ada-project te bouwen met GNAT, schrijft men doorgaans de Ada-broncode en gebruikt vervolgens de volgende commando's in de terminal:
gnatmake my_program.adb
Dit commando compileert het Ada-bronbestand en genereert een uitvoerbaar bestand.
Ada wordt voornamelijk gebruikt in veiligheid-kritische systemen, die onder andere omvatten:
De betrouwbaarheid en onderhoudbaarheid maken het een voorkeurskeuze in deze sectoren.
Hoewel Ada enkele overeenkomsten vertoont met andere programmeertalen, valt het op door de nadruk op veiligheid en betrouwbaarheid.
Bij het omgaan met bron-naar-bron vertaling zijn er specifieke tools die kunnen helpen bij het converteren van Ada-code naar andere programmeertalen. Bijvoorbeeld, tools zoals Gnat2Go kunnen worden gebruikt om Ada-code naar Go te vertalen. Er moet echter voorzichtigheid worden betracht om ervoor te zorgen dat de functionaliteit en veiligheidskenmerken van de oorspronkelijke Ada-code tijdens het vertaalproces behouden blijven.
Enkele veelvoorkomende tools voor bron-naar-bron vertaling zijn: