Ada

Lesezeit: 6 Minuten

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

NameAda
Webseitehttps://www.adaic.org/
Erscheinungsjahr1980
Aktuellste Version (Stand 10. März 2025)Ada 2022
Typisierungstatisch
Paradigmenstrukturiert, objektorientiert
ProsCons
sehr sicher und robustschwerfällig und bürokratisch
ausgezeichnete Wartbarkeiteingeschränkte Anwendungsbereiche
hohe Lesbarkeitkleine Community und geringere Verbreitung
langlebig und bewährt in kritischen Systemenhöherer Einarbeitungsaufwand
eingebautes Nebenläufigkeitsmodellnicht 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.