
Ada ist eine statisch typisierte, strukturierte und objektorientierte Programmiersprache, die ursprünglich im Auftrag des US-Verteidigungsministeriums unter Leitung von Jean David Ichbiah entwickelt wurde. Benannt nach Ada Lovelace, der ersten Programmiererin überhaupt, wurde Ada Anfang der 1980er Jahre als Antwort auf die Vielfalt inkompatibler Sprachen im militärischen Umfeld geschaffen. Ziel war es, eine verlässliche, wartbare und hochsichere Sprache zu entwickeln, die komplexen Anforderungen gerecht wird und langfristige Wartbarkeit garantiert.
Alleinstellungsmerkmale
Die Sprache zeichnet sich besonders durch ihre hohe Sicherheit und Lesbarkeit aus. Ada verfügt über ein sehr ausgefeiltes Typensystem, das Typen strikt kontrolliert und so schon zur Compile-Zeit eine Vielzahl an Fehlern verhindert. Daneben bietet Ada Unterstützung für starke Modularität und Strukturierung, was große Codebasen über Jahrzehnte wartbar macht. Spracheigenschaften wie Packages, generische Programmierung, Tasking als eingebaute Unterstützung für Nebenläufigkeit und Protected Objects zum Schutz geteilter Ressourcen ermöglichen die Erstellung robuster und gleichzeitig hochperformanter paralleler Programme.
Einsatzbereiche
Ada findet vor allem in hochsensiblen und sicherheitsrelevanten Bereichen Verwendung. Prominente Beispiele sind Avioniksysteme wie das Flugsteuerungssystem der Boeing 777, Verkehrsleittechnik, militärische Anwendungen und eingebettete Systeme mit kritischer Zuverlässigkeit. Unternehmen und Institutionen wie Airbus, Boeing, Lockheed Martin, die US-amerikanische NASA sowie zahlreiche Behörden setzen seit vielen Jahren erfolgreich auf Ada.
Pros
Ein entscheidender Vorteil von Ada ist der Fokus auf explizite Code- und Datenstrukturierung. Die Syntax ist absichtlich klar und eindeutig gewählt und vermeidet missverständliche oder mehrdeutige Konstrukte. Dies sorgt für eine sehr hohe Lesbarkeit und damit für eine geringe Fehlerquote und erhöhte Wartbarkeit. Da Ada für langfristige Projekte konzipiert wurde, bietet die Sprache zahlreiche Features zur Prävention von Seiteneffekten und unerwünschtem Verhalten, etwa strenge Typprüfung, explizite Deklarationen und umfangreiche Unterstützung zur Fehlererkennung zur Compile-Zeit. Besonders interessant finde ich hierbei die Unterstützung von Design by Contract mittels sogenannter contract-basierter Programmierung: Vorbedingungen, Nachbedingungen und Invarianten lassen sich direkt im Code definieren und ermöglichen eine formale Beschreibung des gewünschten Verhaltens, die sowohl zur Dokumentation als auch zur automatisierten Prüfung genutzt werden kann.
Ada glänzt besonders bei sicherheitskritischen Anwendungen, bei denen Zuverlässigkeit oberste Priorität hat. Das mächtige Typsystem und die explizite Syntax reduzieren die Fehleranfälligkeit drastisch und ermöglichen sicheren Code auf hohem Niveau. Die langfristige Wartbarkeit ist ein klarer Vorteil für Anwendungen, die über Jahre oder Jahrzehnte gepflegt und erweitert werden müssen.
Die Sprache bietet außerdem von Haus aus Unterstützung für Multithreading, Echtzeitfähigkeit und Generizität. Ada unterstützt zudem formale Verifikation, wodurch mathematische Beweise für Korrektheit und Sicherheit von Code möglich sind.
Der folgende Beispiel-Code demonstriert Nebenläufigkeiten in Ada:
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Real_Time; use Ada.Real_Time;
procedure Tasking_Example is
-- Geschütztes Objekt zur Synchronisation
protected Shared_Resource is
entry Get; -- Task muss Zugriff anfragen
procedure Release; -- Gibt die Ressource frei
private
Busy : Boolean := False; -- Status der Ressource
end Shared_Resource;
protected body Shared_Resource is
entry Get when not Busy is
begin
Busy := True;
end Get;
procedure Release is
begin
Busy := False;
end Release;
end Shared_Resource;
-- Task 1: Producer
task type Producer is
entry Start; -- Startsignal
end Producer;
task body Producer is
begin
accept Start;
for I in 1 .. 5 loop
Put_Line("Producer: Fordere Zugriff an...");
Shared_Resource.Get;
Put_Line("Producer: Nutze die Resource...");
delay 0.5;
Shared_Resource.Release;
Put_Line("Producer: Resource freigegeben.");
end loop;
end Producer;
-- Task 2: Consumer
task type Consumer is
entry Start; -- Startsignal
end Consumer;
task body Consumer is
begin
accept Start;
for I in 1 .. 5 loop
Put_Line("Consumer: Warte auf Zugriff...");
Shared_Resource.Get;
Put_Line("Consumer: Verarbeite Daten...");
delay 0.5;
Shared_Resource.Release;
Put_Line("Consumer: Resource freigegeben.");
end loop;
end Consumer;
-- Initialisiere die Tasks
P : Producer;
C : Consumer;
begin
Put_Line("Starte Tasks...");
P.Start;
C.Start;
end Tasking_Example;
Cons
Die große Stärke von Ada ist gleichzeitig ihre Schwäche: Die sehr strikten Regeln und die auf langfristige Wartbarkeit ausgelegte Sprachgestaltung wirken auf viele Entwickler bürokratisch und schwerfällig. Der Einstieg ist im Vergleich zu verbreiteten Sprachen wie Java oder Python deutlich anspruchsvoller und erfordert tieferes Verständnis für Konzepte wie starke Typisierung und explizite Modularisierung.
Auch der Arbeitsmarkt für Ada-Entwickler ist begrenzt. Die Sprache hat sich primär in Nischen etabliert, und außerhalb dieser ist ihre Verbreitung minimal. Das bedeutet weniger verfügbare Stellen, kleinere Communities und entsprechend wenige Ressourcen für Neueinsteiger. Im Zeitalter von schnellen, agilen Softwareentwicklungsprozessen wirkt Ada etwas aus der Zeit gefallen. Obwohl Ada weiterhin aktiv weiterentwickelt wird – die aktuelle Version Ada 2022 bringt moderne Features und Optimierungen – bleibt die Sprache für viele Anwendungsfälle außerhalb sicherheitskritischer Szenarien unattraktiv.
Datenblatt
Name | Ada |
Webseite | https://www.adaic.org/ |
Erscheinungsjahr | 1980 |
Aktuellste Version (Stand 10. März 2025) | Ada 2022 |
Typisierung | statisch |
Paradigmen | strukturiert, objektorientiert |
Pros | Cons |
---|---|
sehr sicher und robust | schwerfällig und bürokratisch |
ausgezeichnete Wartbarkeit | eingeschränkte Anwendungsbereiche |
hohe Lesbarkeit | kleine Community und geringere Verbreitung |
langlebig und bewährt in kritischen Systemen | höherer Einarbeitungsaufwand |
eingebautes Nebenläufigkeitsmodell | nicht optimal für agile Entwicklungsprozesse |
virtuallet
virtuallet ist ein kleines Programm von mir, welches ich in diversen Programmiersprachen implementiert habe. Hier geht es direkt zum Ada-Code von virtuallet auf GitLab. Hier gibt es weitere Infos zu virtuallet.