Ada ist eine strukturierte , statisch typisierte , imperative und objektorientierte höhere Programmiersprache , inspiriert von Pascal und anderen Sprachen. Sie bietet integrierte Unterstützung für Design by Contract (DbC), extrem starke Typisierung , explizite Nebenläufigkeit, Tasks, synchrone Nachrichtenübermittlung , geschützte Objekte und Nichtdeterminismus . Ada verbessert die Codesicherheit und Wartbarkeit, indem der Compiler Fehler erkennt, anstatt Laufzeitfehler zu behandeln . Ada ist ein internationaler technischer Standard , der gemeinsam von der Internationalen Organisation für Normung (ISO) und der Internationalen Elektrotechnischen Kommission (IEC) definiert wurde. Seit Mai 2023 wird der Standard ISO/IEC 8652:2023 informell als Ada 2022 bezeichnet. [ 11 ] [ 12 ]
Ada wurde ursprünglich von einem Team unter der Leitung des französischen Informatikers Jean Ichbiah von Honeywell im Auftrag des US-Verteidigungsministeriums (DoD) von 1977 bis 1983 entwickelt , um die über 450 damals vom DoD verwendeten Programmiersprachen zu ersetzen. [ 13 ] Ada wurde nach Ada Lovelace (1815–1852) benannt , die als erste Computerprogrammiererin gilt. [ 14 ]
Merkmale
Ada wurde ursprünglich für eingebettete Systeme und Echtzeitsysteme entwickelt . Die Revision Ada 95, die von S. Tucker Taft von Intermetrics zwischen 1992 und 1995 entwickelt wurde, verbesserte die Unterstützung für System-, numerische, Finanz- und objektorientierte Programmierung (OOP). [ 11 ]
Zu den Merkmalen von Ada gehören strenge Typisierung , modulare Programmiermechanismen ( Pakete ), Laufzeitprüfung , Parallelverarbeitung ( Tasks , synchrone Nachrichtenübermittlung , geschützte Objekte und nichtdeterministische Select-Anweisungen ), Ausnahmebehandlung und Generics . Ada 95 führte die Unterstützung für objektorientierte Programmierung , einschließlich dynamischer Dispatch , ein .
Die Syntax von Ada minimiert die Auswahlmöglichkeiten für grundlegende Operationen und bevorzugt englische Schlüsselwörter (wie `and` or elseund `or` and then) gegenüber Symbolen (wie `and` ||und `or` &&). Ada verwendet die grundlegenden arithmetischen Operatoren +`or`, -`or`, *`or` und /`or`, vermeidet aber die Verwendung anderer Symbole. Codeblöcke werden durch Wörter wie `declare`, `begin` und `end` begrenzt, wobei auf `end` (in den meisten Fällen) das Schlüsselwort des abschließenden Blocks folgt (z. B. ` if...` end if, ` loop... end loop`). Bei bedingten Blöcken verhindert dies ein hängendes `else` , das in anderen Sprachen wie C oder Java zu einer falschen verschachtelten `if`-Anweisung führen könnte. [ 11 ]
Ada ist für die Entwicklung sehr großer Softwaresysteme konzipiert. Ada-Pakete können separat kompiliert werden. Auch die Paketspezifikationen (die Paketschnittstelle) lassen sich ohne Implementierung separat kompilieren, um die Konsistenz zu prüfen. Dadurch können Probleme bereits in der Entwurfsphase, noch vor Beginn der Implementierung, erkannt werden.
Zahlreiche Kompilierzeitprüfungen helfen dabei, Fehler zu vermeiden , die in anderen Sprachen erst zur Laufzeit erkennbar wären oder explizite Prüfungen im Quellcode erfordern würden. Beispielsweise verlangt die Syntax explizit benannte Blockschließungen, um Fehler durch nicht übereinstimmende Endtoken zu verhindern. Die Einhaltung strenger Typisierung ermöglicht die Erkennung vieler häufiger Softwarefehler (falsche Parameter, Bereichsverletzungen, ungültige Referenzen, nicht übereinstimmende Typen usw.) entweder zur Kompilierzeit oder zur Laufzeit. Da Parallelverarbeitung Teil der Sprachspezifikation ist, kann der Compiler in manchen Fällen potenzielle Deadlocks erkennen . [ 15 ] Compiler prüfen außerdem häufig auf falsch geschriebene Bezeichner , die Sichtbarkeit von Paketen, redundante Deklarationen usw. und können Warnungen sowie hilfreiche Vorschläge zur Fehlerbehebung ausgeben. [ 11 ]
Ada unterstützt Laufzeitprüfungen zum Schutz vor Zugriffen auf nicht zugewiesenen Speicher, Pufferüberläufen , Bereichsverletzungen, Off-by-One-Fehlern , Array-Zugriffsfehlern und anderen erkennbaren Fehlern. Diese Prüfungen können im Interesse der Laufzeiteffizienz deaktiviert werden, lassen sich aber oft effizient kompilieren. Ada bietet außerdem Funktionen zur Unterstützung der Programmverifikation . Aus diesen Gründen wird Ada mitunter in kritischen Systemen eingesetzt, in denen jede Anomalie schwerwiegende Folgen haben kann, wie z. B. Tod, Verletzungen oder erhebliche finanzielle Verluste. Beispiele für Systeme, in denen Ada verwendet wird, sind Avionik , Flugsicherung , Eisenbahnwesen , Bankwesen, Militär und Raumfahrttechnik . [ 16 ] [ 17 ]
Adas dynamische Speicherverwaltung ist hochgradig und typsicher. Ada kennt keine generischen oder untypisierten Zeiger und deklariert auch keinen Zeigertyp implizit. Stattdessen müssen alle dynamischen Speicherzuweisungen und -freigaben über explizit deklarierte Zugriffstypen erfolgen . Jeder Zugriffstyp verfügt über einen zugehörigen Speicherpool , der die Details der Speicherverwaltung übernimmt. Programmierer können entweder den Standard-Speicherpool verwenden oder neue definieren (dies ist insbesondere bei nicht-uniformem Speicherzugriff relevant ). Es ist sogar möglich, mehrere verschiedene Zugriffstypen zu deklarieren, die alle denselben Typ bezeichnen, aber unterschiedliche Speicherpools verwenden. Die Sprache bietet außerdem Zugriffsprüfungen sowohl zur Kompilierzeit als auch zur Laufzeit, die sicherstellen, dass ein Zugriffswert nicht länger gültig ist als der Typ des Objekts, auf das er zeigt. [ 18 ]
Obwohl die Semantik der Sprache die automatische Speicherbereinigung nicht mehr zugänglicher Objekte erlaubt, unterstützen die meisten Implementierungen dies nicht standardmäßig, da es in Echtzeitsystemen zu unvorhersehbarem Verhalten führen würde. Ada unterstützt eine eingeschränkte Form der regionenbasierten Speicherverwaltung , und in Ada werden durch das Zerstören eines Speicherpools auch alle Objekte in diesem Pool zerstört.
Ein doppelter Bindestrich ( --), ähnlich einem Gedankenstrich , kennzeichnet Kommentartext. Kommentare enden am Zeilenende; es gibt absichtlich keine Möglichkeit, einen Kommentar über mehrere Zeilen zu erstrecken, um zu verhindern, dass ungeschlossene Kommentare versehentlich ganze Quellcodeabschnitte unbrauchbar machen. Um einen ganzen Codeblock zu deaktivieren, muss daher jeder Zeile (oder Spalte) einzeln ein Doppelstrich vorangestellt werden --. Dies kennzeichnet zwar deaktivierten Code eindeutig durch eine Spalte mit wiederholten Doppelstrichen (--) auf der Seite, macht das experimentelle Deaktivieren/Reaktivieren großer Blöcke in Editoren ohne Blockkommentarunterstützung jedoch zu einem langwierigeren Prozess.
Das Semikolon ( ;) beendet eine Anweisung , und eine leere Anweisung (ohne Operation) wird mit 0 bezeichnet null;. Eine einzelne Anweisung ;ohne abschließende Anweisung ist nicht zulässig.
Anders als die meisten ISO- Standards ist die Ada-Sprachdefinition (bekannt als Ada Reference Manual oder ARM , manchmal auch Language Reference Manual oder LRM ) frei verfügbar . Sie dient daher als gängiges Nachschlagewerk für Ada-Programmierer, nicht nur für Entwickler von Ada-Compilern. Neben dem Referenzhandbuch existiert ein ausführliches Dokument, das den Sprachaufbau und die Verwendung verschiedener Sprachkonstrukte erläutert. Auch dieses Dokument wird von Programmierern häufig genutzt. Bei der Überarbeitung der Sprache wurde ein neues Dokument erstellt.
Ein bemerkenswertes kostenloses Software- Tool, das von vielen Ada-Programmierern zur Unterstützung beim Schreiben von Ada-Quellcode verwendet wird, ist das GNAT Programming Studio, und GNAT ist Teil der GNU Compiler Collection .
Alire ist ein Paket- und Toolchain-Management-Tool für Ada. [ 19 ]
Geschichte
In den 1970er Jahren war das US-Verteidigungsministerium (DoD) besorgt über die Vielzahl unterschiedlicher Programmiersprachen, die für seine Projekte im Bereich eingebetteter Computersysteme verwendet wurden. Viele dieser Sprachen waren veraltet oder hardwareabhängig, und keine unterstützte sichere modulare Programmierung. 1975 wurde die High Order Language Working Group ( HOLWG) gegründet, um diese Anzahl durch die Entwicklung einer Programmiersprache zu reduzieren, die allgemein für die Anforderungen des DoD und des britischen Verteidigungsministeriums geeignet war . Nach zahlreichen Iterationen, beginnend mit einem ersten Entwurf [ 20 ], wurde die Programmiersprache schließlich Ada genannt. Die Gesamtzahl der für solche Projekte verwendeten höheren Programmiersprachen sank von über 450 im Jahr 1983 auf 37 im Jahr 1996.
HOLWG crafted the Steelman language requirements, a series of documents stating the requirements they felt a programming language should satisfy. Many existing languages were formally reviewed, but the team concluded in 1977 that no existing language met the specifications. The requirements were created by the United States Department of Defense in The Department of Defense Common High Order Language program in 1978. The predecessors of this document were called, in order, "Strawman", "Woodenman", "Tinman" and "Ironman".[21] The requirements focused on the needs of embedded computer applications, and emphasised reliability, maintainability, and efficiency. Notably, they included exception handling facilities, run-time checking, and parallel computing.
It was concluded that no existing language met these criteria to a sufficient extent,[22] so a contest was called to create a language that would be closer to fulfilling them. The design that won this contest became the Ada programming language. The resulting language followed the Steelman requirements closely, though not exactly.

Requests for proposals for a new programming language were issued and four contractors were hired to develop their proposals under the names of Red (Intermetrics led by Benjamin Brosgol), Green (Honeywell, led by Jean Ichbiah), Blue (SofTech, led by John Goodenough)[23] and Yellow (SRI International, led by Jay Spitzen). In April 1978, after public scrutiny, the Red and Green proposals passed to the next phase. In May 1979, the Green proposal, designed by Jean Ichbiah at Honeywell, was chosen and given the name Ada—after Augusta Ada King, Countess of Lovelace, usually known as Ada Lovelace. This proposal was influenced by the language LIS that Ichbiah and his group had developed in the 1970s. The preliminary Ada reference manual was published in ACM SIGPLAN Notices in June 1979. The Military Standard reference manual was approved on December 10, 1980 (Ada Lovelace's birthday), and given the number MIL-STD-1815 in honor of Ada Lovelace's birth year. In 1981, Tony Hoare took advantage of his Turing Award speech to criticize Ada for being overly complex and hence unreliable,[24] but subsequently seemed to recant in the foreword he wrote for an Ada textbook.[25]

Ada erregte in seinen Anfängen großes Aufsehen in der gesamten Programmiergemeinschaft. Seine Unterstützer und andere sagten voraus, dass es sich zu einer dominanten Sprache für die allgemeine Programmierung entwickeln könnte, nicht nur für Anwendungen im Verteidigungsbereich. [ 26 ] Ichbiah erklärte öffentlich, dass innerhalb von zehn Jahren nur noch zwei Programmiersprachen übrig sein würden: Ada und Lisp . [ 27 ] Frühe Ada-Compiler hatten Schwierigkeiten, die große und komplexe Sprache zu implementieren, und sowohl die Kompilier- als auch die Laufzeitleistung waren tendenziell langsam und die Werkzeuge primitiv. [ 26 ] Compilerhersteller konzentrierten sich hauptsächlich darauf, die umfangreiche, von der Regierung geforderte ACVC-Validierungssuite ( Ada Compiler Validation Capability ) zu bestehen, die für die Sprachkonformitätsprüfung unerlässlich war und ein weiteres neues Merkmal der Ada-Sprachentwicklung darstellte. [ 27 ]
Die erste validierte Ada-Implementierung war der NYU Ada/Ed-Übersetzer [ 28 ] , der am 11. April 1983 zertifiziert wurde. NYU Ada/Ed ist in der höheren Programmiersprache SETL implementiert . [ 29 ] Mehrere kommerzielle Unternehmen begannen, Ada-Compiler und zugehörige Entwicklungswerkzeuge anzubieten, darunter Alsys , TeleSoft , DDC-I , Advanced Computer Techniques , Tartan Laboratories , Irvine Compiler , TLD Systems und Verdix . [ 30 ] Computerhersteller mit einem bedeutenden Geschäft in der Verteidigungs-, Luft- und Raumfahrtindustrie oder verwandten Branchen boten ebenfalls Ada-Compiler und -Werkzeuge auf ihren Plattformen an; dazu gehörten Concurrent Computer Corporation , Cray Research, Inc. , Digital Equipment Corporation , Harris Computer Systems und Siemens Nixdorf Informationssysteme AG . [ 30 ]
1991 führte das US-Verteidigungsministerium die Pflicht zur Verwendung von Ada (das Ada-Mandat ) für sämtliche Software ein [ 31 ] , wobei jedoch häufig Ausnahmen gewährt wurden [ 26 ] . Das Ada-Mandat des Verteidigungsministeriums wurde 1997 faktisch aufgehoben, da das Ministerium begann, kommerzielle Standardsoftware (COTS) einzusetzen [ 26 ] . Ähnliche Anforderungen galten auch in anderen NATO- Staaten: Ada war für NATO-Systeme mit Führungs- und Kontrollfunktionen sowie anderen Funktionen vorgeschrieben und die vorgeschriebene oder bevorzugte Programmiersprache für verteidigungsbezogene Anwendungen in Ländern wie Schweden, Deutschland und Kanada [ 32 ] .
In den späten 1980er und frühen 1990er Jahren hatten sich die Ada-Compiler zwar in ihrer Leistung verbessert, es gab aber immer noch Hindernisse, die die vollständige Ausschöpfung der Fähigkeiten von Ada erschwerten. Dazu gehörte unter anderem ein Aufgabenmodell, das sich von dem unterschied, was die meisten Echtzeitprogrammierer gewohnt waren. [ 27 ]
Aufgrund seiner sicherheitskritischen Unterstützungsfunktionen wird Ada heute nicht nur für militärische Anwendungen, sondern auch in kommerziellen Projekten eingesetzt, in denen Softwarefehler schwerwiegende Folgen haben können, z. B. in der Avionik und Flugsicherung , bei kommerziellen Raketen wie der Ariane 4 und 5 , Satelliten und anderen Weltraumsystemen, im Schienenverkehr und im Bankwesen. [ 17 ] So wurde beispielsweise das primäre Flugsteuerungssystem (Primary Flight Control System) , die Fly-by-Wire -Software der Boeing 777 , in Ada geschrieben, ebenso wie die Fly-by-Wire-Systeme für den aerodynamisch instabilen Eurofighter Typhoon , [ 33 ] den Saab Gripen , [ 34 ] die Lockheed Martin F-22 Raptor und das DFCS-Ersatzflugsteuerungssystem für die Grumman F-14 Tomcat . Das kanadische automatisierte Flugverkehrssystem (Canadian Automated Air Traffic System) wurde in einer Million Zeilen Ada-Code geschrieben ( SLOC- Zählung). Es zeichnete sich durch fortschrittliche verteilte Verarbeitung , eine verteilte Ada-Datenbank und objektorientiertes Design aus. Ada wird auch in anderen Flugsicherungssystemen eingesetzt, z. B. im britischen Flugsicherungssystem der nächsten Generation, iFACTS (Interim Future Area Control Tools Support), das mit SPARK Ada entwickelt und implementiert wurde . [ 35 ] Es wird außerdem im französischen Führerstandssignalsystem TVM des TGV - Hochgeschwindigkeitszuges sowie in den S - Bahnen von Paris, London, Hongkong und New York verwendet. [ 17 ] [ 36 ]
Die Ada-95-Revision der Sprache ging über die Steelman-Anforderungen hinaus, indem sie neben eingebetteten Systemen auch auf Allzwecksysteme abzielte und Funktionen zur Unterstützung der objektorientierten Programmierung hinzufügte . [ 37 ]
Standardisierung
| Jahr | Informeller Name | Offizieller Standard |
|---|---|---|
| 1980 | Ada | ANSI MIL-STD 1815 |
| 1983 | Ada 83/87 | ANSI MIL-STD 1815A ISO/IEC 8652:1987 |
| 1995 | Ada 95 | ISO/IEC 8652:1995 |
| 2001 | ISO/IEC 8652:1995/Cor 1:2001 | |
| 2007 | Ada 2005 | ISO/IEC 8652:1995/Amd 1:2007 |
| 2012 | Ada 2012 | ISO/IEC 8652:2012 |
| 2016 | ISO/IEC 8652:2012/Cor 1:2016 | |
| 2023 | Ada 2022 | ISO/IEC 8652:2023 |
Vorläufige Informationen zu Ada finden Sie in ACM Sigplan Notices Vol 14, Nr. 6, Juni 1979 [ 38 ].
Ada wurde erstmals 1980 als ANSI- Standard ANSI/ MIL-STD 1815 veröffentlicht . Da diese erste Version zahlreiche Fehler und Inkonsistenzen aufwies, wurde 1983 die überarbeitete Fassung als ANSI /MIL-STD 1815A herausgegeben. Ohne weitere Änderungen wurde sie 1987 zum ISO-Standard. [ 40 ] Diese Version der Sprache ist allgemein als Ada 83 bekannt, benannt nach dem Datum ihrer Annahme durch ANSI, wird aber gelegentlich auch als Ada 87 bezeichnet , nach dem Datum ihrer Annahme durch ISO. [ 41 ] Es existiert auch eine französische Übersetzung; DIN übersetzte sie 1988 ins Deutsche als DIN 66268.
Ada 95 , der gemeinsame ISO/IEC/ANSI-Standard ISO/IEC 8652:1995 [ 42 ] [ 43 ] , wurde im Februar 1995 veröffentlicht und war damit die erste ISO-Standard-basierte objektorientierte Programmiersprache. Zur Unterstützung der Standardrevision und der späteren Akzeptanz finanzierte die US Air Force die Entwicklung des GNAT- Compilers . Der GNAT-Compiler ist heute Teil der GNU Compiler Collection .
Die Arbeiten zur Verbesserung und Aktualisierung des technischen Inhalts der Programmiersprache Ada wurden fortgesetzt. Ein technisches Korrigendum zu Ada 95 wurde im Oktober 2001 veröffentlicht [ 44 ] [ 45 ] , und eine wichtige Änderung, ISO/IEC 8652:1995/Amd 1:2007 [ 46 ] [ 47 ] , wurde am 9. März 2007 veröffentlicht und ist allgemein als Ada 2005 bekannt , da die Arbeiten an dem neuen Standard in diesem Jahr abgeschlossen wurden.
Auf der Ada-Europe-Konferenz 2012 in Stockholm gaben die Ada Resource Association (ARA) und Ada-Europe die Fertigstellung der neuesten Version der Programmiersprache Ada sowie die Einreichung des Referenzhandbuchs beim ISO/IEC JTC 1/SC 22 /WG 9 der Internationalen Organisation für Normung (ISO) und der Internationalen Elektrotechnischen Kommission (IEC) zur Genehmigung bekannt. ISO/IEC 8652:2012 [ 48 ] (siehe Ada 2012 RM ) wurde im Dezember 2012 veröffentlicht und ist als Ada 2012 bekannt . Ein technisches Corrigendum, ISO/IEC 8652:2012/COR 1:2016, wurde ebenfalls veröffentlicht [ 49 ] (siehe RM 2012 mit TC 1 ).
Die auf Ada basierende SPARK- Technologie wurde durch die besonderen Eigenschaften der Ada-Sprache ermöglicht, darunter die Trennung von Spezifikation und Implementierung mittels Paketen, die Unterstützung benutzerdefinierter Skalartypen und die Verwendung zusammengesetzter Typen ohne Zeiger. Die Ada-Revision von 2012 war für SPARK besonders wichtig, da die darin enthaltene Unterstützung von Verträgen als Teil der Sprache es ermöglichte, SPARK von Grund auf so zu gestalten, dass das Ziel der gemeinsamen Entwicklung von Programmen und deren Korrektheitsbeweisen erreicht wird. [ 50 ]
Am 2. Mai 2023 wurde die Veröffentlichung der Ada-2022- Edition des Programmiersprachenstandards von der Ada-Community offiziell genehmigt. [ 12 ]
Trotz der Bezeichnungen Ada 83, 95 usw. gibt es rechtlich nur einen Ada-Standard, den letzten ISO/IEC-Standard: Mit der Annahme einer neuen Standardversion wird die vorherige zurückgezogen. Die anderen Bezeichnungen sind informelle Bezeichnungen, die sich auf eine bestimmte Ausgabe beziehen.
Weitere verwandte Normen sind ISO/IEC 8651 -3:1988 Informationsverarbeitungssysteme – Computergrafik – Sprachbindungen für das grafische Kernelsystem (GKS) – Teil 3: Ada .
Sprachkonstrukte
Ada ist eine ALGOL -ähnliche Programmiersprache mit Kontrollstrukturen, die reservierte Wörter wie ` if` , `then` , `else` , ` while` , ` for` usw. enthalten. Darüber hinaus bietet Ada zahlreiche Möglichkeiten zur Datenstrukturierung und weitere Abstraktionen, die im ursprünglichen ALGOL 60 nicht enthalten waren , wie beispielsweise Typdefinitionen , Records , Zeiger und Aufzählungen . Diese Konstrukte wurden teilweise von Pascal übernommen oder inspiriert .
"Hallo Welt!" auf Ada
Ein gängiges Beispiel für die Syntax einer Programmiersprache ist das „Hello, World!“-Programm : (hello.adb)
mit Ada.Text_IO ; verwenden Sie Ada.Text_IO ;Prozedur Hallo istbeginnenPut_Line ( "Hallo Welt!" );Ende ;Dieses Programm kann mithilfe des frei verfügbaren Open-Source-Compilers GNAT kompiliert werden , indem man Folgendes ausführt:
gnatmake hello.adb Datentypen
Das Typsystem von Ada basiert nicht auf vordefinierten primitiven Datentypen , sondern ermöglicht es Benutzern, eigene Typen zu deklarieren. Diese Deklaration wiederum basiert nicht auf der internen Repräsentation des Typs, sondern auf der Beschreibung des zu erreichenden Ziels. Dadurch kann der Compiler eine geeignete Speichergröße für den Typ bestimmen und zur Kompilier- und Laufzeit auf Verletzungen der Typdefinition prüfen (z. B. Bereichsüberschreitungen, Pufferüberläufe, Typkonsistenz usw.). Ada unterstützt numerische Typen, die durch einen Bereich definiert sind, Modulo-Typen, Aggregattypen (Records und Arrays) und Aufzählungstypen. Zugriffstypen definieren eine Referenz auf eine Instanz eines bestimmten Typs; untypisierte Zeiger sind nicht zulässig. Zu den speziellen Typen der Sprache gehören Task-Typen und geschützte Typen.
Ein Datum könnte beispielsweise wie folgt dargestellt werden:
type Day_type is range 1 .. 31 ;type Month_type is range 1 .. 12 ;type Year_type is range 1800 .. 2100 ;type Hours is mod 24 ;Der Wochentag ist ( Montag , Dienstag , Mittwoch , Donnerstag , Freitag , Samstag , Sonntag );Typ Datum istaufzeichnenTag : Tagestyp ;Monat : Monatstyp ;Jahr : Jahr_Typ ;Datensatz beenden ;Day_type, Month_type, Year_type und Hours sind inkompatible Datentypen, was beispielsweise bedeutet, dass der folgende Ausdruck ungültig ist:
Heute : Tagestyp := 4 ;Aktueller_Monat : Monatstyp := 10 ;... Heute + Aktueller_Monat ... -- illegalDer vordefinierte Plusoperator kann nur Werte vom gleichen Typ addieren, daher ist der Ausdruck ungültig.
Typen können durch die Deklaration von Subtypen verfeinert werden :
Der Subtyp Working_Hours ist vom Typ Hours range 0 .. 12 ; -- maximal 12 Stunden Arbeitszeit pro TagDer Subtyp Working_Day ist der Wochentagsbereich Montag .. Freitag ; -- ArbeitstageWork_Load : konstantes Array ( Working_Day ) von Working_Hours -- implizite Typdeklaration:= ( Freitag => 6 , Montag => 4 , andere => 10 ); -- Nachschlagetabelle für Arbeitszeiten mit InitialisierungTypen können Modifikatoren wie „ limited“, „abstract“, „private“ usw. haben. Private Typen geben ihre innere Struktur nicht preis; Objekte von limitierten Typen können nicht kopiert werden. [ 51 ] Ada 95 fügt weitere Funktionen zur objektorientierten Erweiterung von Typen hinzu.
Kontrollstrukturen
Ada ist eine strukturierte Programmiersprache , was bedeutet, dass der Programmablauf in standardisierten Anweisungen strukturiert ist. Alle Standardkonstrukte und der vorzeitige Abbruch auf tiefer Ebene werden unterstützt, sodass die Verwendung der ebenfalls unterstützten „ go to “-Befehle selten erforderlich ist.
-- solange a ungleich b ist, Schleife.solange a /= b SchleifeAda.Text_IO.Put_Line ( " Warten " ) ;Schleife beenden ;Wenn a > b dannAda.Text_IO.Put_Line ( " Bedingung erfüllt " ) ;andersAda.Text_IO.Put_Line ( "Bedingung nicht erfüllt " ) ;Ende falls ;for i in 1 .. 10 loopAda.Text_IO.Put ( " Iteration : " ) ;Ada.Text_IO.Put ( i ) ;Ada.Text_IO.Put_Line ;Schleife beenden ;Schleifea := a + 1 ;Beende die Aktion, wenn a = 10 ;Schleife beenden ;Fall i istwenn 0 => Ada . Text_IO . Put ( "null" );wenn 1 = > Ada.Text_IO.Put ( " eins " ) ;when 2 => Ada . Text_IO . Put ( "two" );-- Fallbeschreibungen müssen alle möglichen Fälle abdecken:when others = > Ada.Text_IO.Put ( " keine der oben genannten " ) ;Endfall ;for aWeekday in Weekday ' Range loop -- Schleife über eine AufzählungPut_Line ( Weekday ' Image ( aWeekday ) ); -- Ausgabestring-Darstellung einer Aufzählungif aWeekday in Working_Day then -- Überprüfung eines Subtyps einer AufzählungPut_Line ( " für " &Working_Hours ' Image ( Work_Load ( aWeekday )) ); -- Zugriff auf eine NachschlagetabelleEnde falls ;Schleife beenden ;Pakete, Verfahren und Funktionen
Zu den Bestandteilen eines Ada-Programms gehören Pakete, Prozeduren und Funktionen.
Funktionen unterscheiden sich von Prozeduren dadurch, dass sie einen Wert zurückgeben müssen. Funktionsaufrufe können nicht „wie Anweisungen“ verwendet werden, und ihr Ergebnis muss einer Variablen zugewiesen werden. Seit Ada 2012 müssen Funktionen jedoch nicht mehr rein sein und dürfen ihre entsprechend deklarierten Parameter oder den globalen Zustand verändern. [ 52 ]
Beispiel: Paketspezifikation (example.ads)
Paketbeispiel istTyp Zahl ist Bereich 1 .. 11 ;Prozedur Print_and_Increment ( j : in out Number );Beispielende ;Paketkörper (example.adb)
mit Ada.Text_IO ;Beispiel für den Paketkörper isti : Number := Number ' First ;procedure Print_and_Increment ( j : in out Number ) isfunction Next ( k : in Number ) return Number isbeginnenreturn k + 1 ;Ende Nächstes ;beginnenAda.Text_IO.Put_Line ( " Die Summe beträgt: " & Number ' Image ( j ) ) ;j := Next ( j );end Print_and_Increment ;-- Die Paketinitialisierung wird ausgeführt, wenn das Paket erstellt wirdbeginnenwhile i < Number ' Letzte SchleifePrint_and_Increment ( i );Schleife beenden ;Beispielende ;Dieses Programm kann beispielsweise mit dem frei verfügbaren Open-Source-Compiler GNAT kompiliert werden , indem man Folgendes ausführt:
gnatmake -z example.adb Pakete, Prozeduren und Funktionen können beliebig tief verschachtelt werden und jeweils der logische äußerste Block sein.
Jedes Paket, jede Prozedur oder Funktion kann eigene Deklarationen von Konstanten, Typen, Variablen und anderen Prozeduren, Funktionen und Paketen haben, die in beliebiger Reihenfolge deklariert werden können.
Pragmas
Ein Pragma ist eine Compiler-Direktive , die dem Compiler Informationen übermittelt, um die kompilierte Ausgabe gezielt zu manipulieren. [ 53 ] Einige Pragmas sind in die Sprache integriert, [ 54 ] während andere implementierungsspezifisch sind.
Häufig verwendete Compiler-Pragmas sind beispielsweise das Deaktivieren bestimmter Funktionen, wie etwa die Typüberprüfung zur Laufzeit oder die Überprüfung der Grenzen von Array-Indizes, oder das Anweisen des Compilers, Objektcode anstelle eines Funktionsaufrufs einzufügen (wie es C/C++ bei Inline-Funktionen tut ).
Generika
Siehe auch
- Ada-Compiler
- ALGOL 68 – Programmiersprache
- APSE – Spezifikation der Programmierumgebung
- Liste der Ada-Software und -Tools
- Pascal – Programmiersprache
- Ravenscar-Profil – Ein Merkmal der Programmiersprache Ada
- Smalltalk – Objektorientierte Programmiersprache
- SPARK – Programmiersprache
- VHDL – Hardwarebeschreibungssprache
- Ada-Programmierung auf Wikibooks
Anmerkungen
- ^ „Ada2012 Begründung“ (PDF) . adacore.com . Archiviert (PDF) vom Original am 18. April 2016. Abgerufen am 5. Mai 2018 .
- ^ „Kommerzielle Softwarelösungen für Ada, C und C++“ . AdaCore . Abgerufen am 4. April 2023 .
- ^ „PTC ObjectAda“ . PTC.com . Abgerufen am 27.01.2014 .
- ^ „MapuSoft Ada-C/C++-Wechsler“ . 16. April 2019.
- ^ „Liste der ADA-95-zertifizierten Prozessoren – Details“ . ada-auth.org . Abgerufen am 4. April 2023 .
- ^ Ada Rationale, 1986, S. 23, 70, 110–114, 137, 165, 236
- ^ „Chapel spec (Acknowledgements)“ (PDF) . Cray Inc. 01.10.2015. Archiviert (PDF) vom Original am 09.10.2022 . Abgerufen am 14.01.2016 .
- ^ „Drago“ . Archiviert vom Original am 14.09.2020 . Abgerufen am 06.08.2018 .
- ^ „Das Griffin-Projekt“ . cs.nyu.edu . Abgerufen am 4. April 2023 .
- ^ „SparForte-Programmiersprache“ . www.sparforte.com . Abgerufen am 4. April 2023 .
- ^ a b c d https://nvlpubs.nist.gov/nistpubs/Legacy/FIPS/fipspub119.pdf Programmiersprache Ada
- ^ Pinho , Luis Miguel (Juni 2023) . „Vom Schreibtisch der Redaktion“ . Ada-Briefe . XLIII (1). Association for Computing Machinery: 3. doi : 10.1145/3631483 (inaktiv am 1. Juli 2025).
{{cite journal}}: CS1 Wartung: DOI inaktiv ab Juli 2025 ( Link ) - ^ „Die Programmiersprache Ada“ . Universität von Michigan . Archiviert vom Original am 22.05.2016 . Abgerufen am 27. Mai 2016 .
- ^ Fuegi, J; Francis, J (2003). „Lovelace & Babbage und die Entstehung der 1843er ‚Notes‘“". IEEE Annals of the History of Computing . 25 (4): 16– 26. doi : 10.1109/MAHC.2003.1253887 . S2CID 40077111 .
- ^ „Concurrency“. Ada 95 Quality and Style Guide . Ada Information Clearinghouse . Abgerufen am 5. November 2021 .
- ^ Taft, S. Tucker; Olsen, Florence (30.06.1999). „Ada hilft dabei, weniger fehlerhaften Code zu schreiben“ . Government Computer News. S. 2–3 . Archiviert vom Original am 31.08.2015 . Abgerufen am 14.09.2010 .
- ^ a b c Feldman, Michael. "Wer nutzt Ada? Praxisprojekte mit der Programmiersprache Ada, November 2014" . SIGAda Education Working Group.
- ^ Keine sichere dynamische Speicherverwaltung in ADA , in: Writing Linux Kernel Modules in Safe Rust – Geoffrey Thomas & Alex Gaynor, The Linux Foundation, 2019-10-02
- ^ "Alire - Homepage" . Adacore . Abgerufen am 09.12.2024 .
- ^ „DoD – Strawman Requirements – April 1975“ . iment.com . Abgerufen am 4. April 2023 .
- ^ Verteidigungsministerium (Juni 1978), Anforderungen an höhere Programmiersprachen: „Steelman“
- ^ SoftTech Inc. (1976), „Evaluation of ALGOL 68, Jovial J3B, Pascal, Simula 67, and TACPOL Versus TINMAN - Requirements for a Common High Order Programming Language.“ – Siehe auch: ALGOL 68 , JOVIAL J3B, Pascal , Simula 67, and TACPOL (Defense Technical Information Center – DTIC ADA037637, Report Number 1021-14)
- ^ „John Goodenough | SEI-Mitarbeiterprofil“ . Sei.cmu.edu . Abgerufen am 27.01.2014 .
- ^ CAR, Hoare (1981). „Des Kaisers alte Kleider“ (PDF) . Communications of the ACM . 24 (2). Association for Computing Machinery : 75–83 . doi : 10.1145/358549.358561 . S2CID 97895. Archiviert vom Original (PDF) am 4. März 2016.
- ^ Watt, DA; Wichmann, BA; Findlay, W. (1987). Ada: Sprache und Methodik . Prentice-Hall.
- ^ a b c d Sward, Ricky E. (November 2010). „Aufstieg, Fall und Fortbestand von Ada“. SIGAda '10: Proceedings of the ACM SIGAda annual international conference on SIGAda . S. 71–74 . doi : 10.1145/1879063.1879081 . ISBN 978-1-4503-0027-8Die
- ^ a b c Rosen, JP. (August 2009). „Das/Die Ada-Paradoxon(en)“. Ada Letters . 24 (2). ACM SIGAda: 28–35 . doi : 10.1145/1620593.1620597 . S2CID 608405 .
- ^ SofTech Inc. (11.04.1983). „Ada Compiler Validation Summary Report: NYU Ada/ED, Version 19.7 V-001“ . Waltham, MA. Archiviert vom Original am 12.03.2012 . Abgerufen am 16.12.2010 .
- ^ Dewar, Robert BK; Fisher, Gerald A. Jr.; Schonberg, Edmond; Froelich, Robert; Bryant, Stephen; Goss, Clinton F.; Burke, Michael (November 1980). „Der NYU Ada Übersetzer und Interpreter“. Proceedings des ACM-SIGPLAN Symposiums über die Programmiersprache Ada – SIGPLAN '80 . Band 15. S. 194–201 . doi : 10.1145/948632.948659 . ISBN 0-89791-030-3. S2CID 10586359 .
- ^ a b „Liste der validierten Ada-Compiler“. Ada Information Clearinghouse. 1. Juli 1992. S. 1–36 .
- ^ Ada Information Clearinghouse (1994). „Das ADA-Mandat des Kongresses“ . Archiviert vom Original am 4. März 2016. Abgerufen am 7. Juni 2015 .
- ^ Babiak, Nicholas J. (1989). Ada, die neue Computersprache für Waffensysteme des US-Verteidigungsministeriums – Allheilmittel oder Katastrophe? (PDF) . Air University (US-Luftwaffe) . S. 39–40 . Archiviert (PDF) vom Original am 15. Dezember 2019.
- ^ „Agiles Denken“ . FlightGlobal . 16. Juni 1999. Archiviert vom Original am 15. April 2021. Abgerufen am 13. Februar 2024 .
- ^ Frisberg, Bo. „Usage of Ada in the Gripen Flight Control System“ (PDF) . Die Special Interest Group on Ada . Archiviert (PDF) vom Original am 15. Januar 2024. Abgerufen am 13. Februar 2024 .
- ^ AdaCore. „GNAT Pro für das britische Flugsicherungssystem der nächsten Generation ausgewählt“ . Archiviert vom Original am 24.12.2010 . Abgerufen am 1.3.2011 .
- ^ AdaCore. „Look Who's Using Ada“ . Archiviert vom Original am 24.12.2010 . Abgerufen am 1.3.2011 .
- ^ David A. Wheeler (1997), „Ada, C, C++ und Java vs. The Steelman“ . Ursprünglich veröffentlicht in Ada Letters Juli/August 1997.
- ^ Ichbiah, JD (Juni 1979). "ACM Sigplan Notices" . S. 1–145 . doi : 10.1145/956650.956651 .
- ^ Zusammenfassung der Änderungen in der Ada-Sprache
- ^ „ISO 8652:1987“ . ISO . 21.02.2013 . Abgerufen am 19.01.2024 .
- ^ „Ada 83 LRM, Titelseite“ . archive.adaic.com . Abgerufen am 19.01.2024 .
- ^ „ISO/IEC 8652:1995“ . ISO . Abgerufen am 19.01.2024 .
- ^ „Ada 95 Language Reference Manual (original) – Ada Resource Association“ . www.adaic.org . Abgerufen am 19.01.2024 .
- ^ ISO/IEC 8652:1995/Corr 1:2001
- ^ Ada 95 RM mit TC 1
- ^ „ISO/IEC 8652:1995/Amd 1:2007“ . ISO . Abgerufen am 19.01.2024 .
- ^ „ADA-Referenzhandbuch, ISO/IEC 8652:2007(E) Ausgabe 3“ . www.adaic.org . Abgerufen am 19.01.2024 .
- ^ „ISO/IEC 8652:2012“ . ISO . 28.03.2013 . Abgerufen am 19.01.2024 .
- ^ „ISO/IEC 8652:2012/Cor 1:2016“ . ISO . Abgerufen am 19.01.2024 .
- ^ Chapman, Roderick; Dross, Claire; Matthews, Stuart; Moy, Yannick (März 2024). „Gemeinsame Programmentwicklung und deren Korrektheitsnachweis“. Communications of the ACM . 67 (3): 84–94 . doi : 10.1145/3624728 .
- ^ „Ada Syntax Card“ (PDF) . Archiviert vom Original (PDF) am 6. Juli 2011. Abgerufen am 28. Februar 2011 .
- ^ „Unterprogramme“ . learn.adacore.com . AdaCore . Abgerufen am 14. April 2024 .
- ^ „Ada 83 LRM, Abschnitt 2.8: Pragmas“ . Archive.adaic.com . Abgerufen am 27.01.2014 .
- ^ „Ada 83 LRM, Anhang B: Vordefinierte Sprachpragmas“ . Archive.adaic.com. Archiviert vom Original am 6. Februar 2012. Abgerufen am 27. Januar 2014 .
Referenzen
Internationale Standards
- ISO/IEC 8652 : Informationstechnologie – Programmiersprachen – Ada
- ISO/IEC 15291 : Informationstechnik – Programmiersprachen – Ada Semantic Interface Specification ( ASIS )
- ISO/IEC 18009 : Informationstechnik—Programmiersprachen—Ada: Konformitätsbewertung eines Sprachprozessors ( ACATS )
- IEEE-Standard 1003.5b-1996 , die POSIX- Ada-Bindung
- Ada Language Mapping Specification , die CORBA- Schnittstellenbeschreibungssprache (IDL) zu Ada-Abbildung
Begründung
Diese Dokumente wurden in verschiedenen Formen veröffentlicht, unter anderem in gedruckter Form.
- Ichbiah, Jean D. ; Barnes, John GP; Firth, Robert J.; Woodger, Mike (1986), Begründung für den Entwurf der Programmiersprache Ada , archiviert vom Original am 2007-02-02Ebenfalls verfügbar unter apps.dtic.mil und als PDF.
- Barnes, John GP (1995), Ada 95 rationale: the language: the standard libraries
- Barnes, John (2006) [2005], Begründung für Ada 2005
Bücher
- Booch, Grady (1987). Softwareentwicklung mit Ada . Kalifornien: The Benjamin/Cummings Publishing Company. ISBN 0-8053-0604-8Die
- Skansholm, Jan (1996). Ada 95 From the Beginning . Addison-Wesley. ISBN 0-201-40376-5Die
- Gilpin, Geoff (1985). Ada: Eine geführte Tour und Anleitung . Prentice Hall. ISBN 978-0-13-004045-9Die
- Beidler, John (1997). Datenstrukturen und Algorithmen: Ein objektorientierter Ansatz mit Ada 95 . Springer-Verlag. ISBN 0-387-94834-1Die
- Gonzalez, Dean W. (1991). Ada Programmer's Handbook . Benjamin-Cummings Publishing Company. ISBN 0-8053-2529-8Die
- Ben-Ari, M. (1998). Ada für Software-Ingenieure . John Wiley & Sons. ISBN 0-471-97912-0Die
- Ben-Ari, M. (2009). Ada für Software-Ingenieure: Zweite Auflage mit Ada 2005. Springer. ISBN 978-1-84882-313-6Die
- Cohen, Norman (1996). Ada als Zweitsprache . McGraw-Hill Science/Engineering/Math. ISBN 0-07-011607-5Die
- Burns, Alan ; Wellings, Andy (2001). Echtzeitsysteme und Programmiersprachen. Ada 95, Echtzeit-Java und Echtzeit-POSIX . Addison-Wesley. ISBN 0-201-72988-1Die
- Burns, Alan ; Wellings, Andy (1995). Concurrency in Ada . Cambridge University Press. ISBN 0-521-62911-XDie
- Atkinson, Colin (1991). Objektorientierte Wiederverwendung, Parallelverarbeitung und Verteilung: Ein Ada-basierter Ansatz . Addison-Wesley. ISBN 0-201-56527-7Die
- Booch, Grady ; Bryan, Doug (1994). Software Engineering with Ada . Addison-Wesley. ISBN 0-8053-0608-0Die
- Jones, Do-While (1989). Ada in Action: With Practical Programming Examples . John Wiley & Sons. ISBN 0-471-60708-8Die
- Stubbs, Daniel; Webre, Neil W. (1993). Datenstrukturen mit abstrakten Datentypen und Ada . Brooks Cole. ISBN 0-534-14448-9Die
- Ledru, Pascal (Dezember 1998). Verteilte Programmierung in Ada mit geschützten Objekten . Dissertation.com. ISBN 1-58112-034-6Die
- Culwin, Fintan (1997). Ada, ein Entwicklungsansatz . Prentice Hall. ISBN 0-13-264680-3Die
- English, John; Culwin, Fintan (Januar 1997). Ada 95: Die Kunst der objektorientierten Programmierung . Prentice Hall. ISBN 0-13-230350-7Die
- Musser, David R.; Stepanov, Alexander (24. Oktober 1989). Die Ada Generic Library: Pakete zur Verarbeitung linearer Listen . Springer-Verlag. ISBN 0-387-97133-5Die
- Feldman, Michael B. (1997). Softwareentwicklung und Datenstrukturen mit Ada 95. Addison-Wesley. ISBN 0-201-88795-9Die
- Johnston, Simon (1997). Ada 95 für C- und C++-Programmierer . Addison-Wesley. ISBN 0-201-40363-3Die
- Feldman, Michael B.; Koffman, Elliot B. (1992–1993). Ada: Problemlösung und Programmentwurf . Addison-Wesley. ISBN 0-201-52279-9Die795 Seiten.
- Feldman, Michael B .; Koffman, Elliot B. (1999). Ada 95. Addison-Wesley. ISBN 0-201-36123-XDie
- Dale, Nell B .; Weems, Chip; McCormick, John (August 1996). Programmieren und Problemlösen mit Ada 95. Jones & Bartlett Publishers. ISBN 0-7637-0293-5Die
- Dale, Nell B .; McCormick, John (2007). Ada Plus Data Structures: An Object-Oriented Approach, 2. Auflage . Jones & Bartlett Publishers. ISBN 978-0-7637-3794-8Die
- Krell, Bruce C. (1992). Entwicklung mit Ada: Lebenszyklusmethoden . Bantam Dell Pub Group. ISBN 0-553-09102-6Die
- Bishop, Judy (10. Mai 1990). Distributed Ada: Developments and Experiences . Cambridge University Press. ISBN 0-521-39251-9Die
- Sanden, Bo (1994). Software Systems Construction With Examples in Ada . Prentice Hall. ISBN 0-13-030834-XDie
- Hillam, Bruce (1994). Einführung in abstrakte Datentypen mit Ada . Prentice Hall. ISBN 0-13-045949-6Die
- Rudd, David (1994). Einführung in Software-Design und -Entwicklung mit Ada . Brooks Cole. ISBN 0-314-02829-3Die
- Pyle, Ian C. (1991). Entwicklung von Sicherheitssystemen: Ein Leitfaden mit ADA . Prentice Hall. ISBN 0-13-204298-3Die
- Baker, Louis (1989). Künstliche Intelligenz mit Ada . McGraw-Hill. ISBN 0-07-003350-1Die
- Burns, Alan ; Wellings, Andy (1995). HRT-HOOD: Eine strukturierte Entwurfsmethode für harte Echtzeit-Ada-Systeme . North-Holland. ISBN 0-444-82164-3Die
- Savitch, Walter; Peterson, Charles (1992). Ada: Eine Einführung in die Kunst und Wissenschaft der Programmierung . Benjamin-Cummings Publishing Company. ISBN 0-8053-7070-6Die
- Weiss, Mark Allen (1993). Datenstrukturen und Algorithmenanalyse in Ada . Benjamin-Cummings Publishing Company. ISBN 0-8053-9055-3Die
- Ledgard, Henry (1983). Ada: Eine Einführung (2. Aufl.). Springer-Verlag. ISBN 0-387-90814-5Die
- Bjorner, Dines; Oest, Ole N., Hrsg. (1980). Auf dem Weg zu einer formalen Beschreibung von Ada . London: Springer-Verlag. ISBN 3-540-10283-3Die
Weiterführende Literatur
- Barnes, John (2024). Programmieren in Ada 2022. Cambridge University Press. ISBN 978-1-009-56477-9Die
- Barnes, John (2014). Programmieren in Ada 2012 mit einer Vorschau auf Ada 2022. Cambridge University Press. ISBN 978-1-009-18134-1Die
- Barnes, John (2014). Programmieren in Ada 2012. Cambridge University Press. ISBN 978-1-107-42481-4Die
- Barnes, John (2006). Programmieren in Ada 2005. Addison-Wesley. ISBN 0-321-34078-7Die
- Barnes, John (1991). Programming in Ada plus Language Reference Manual . Addison-Wesley. ISBN 0-201-56539-0Die
- Barnes, John (1998). Programmieren in Ada 95. Addison-Wesley. ISBN 0-201-34293-6Die
- Barnes, John (1997). High Integrity ADA: Der SPARK-Ansatz . Addison-Wesley. ISBN 0-201-17517-7Die
- Barnes, John (2003). Hochintegrierte Software: Der SPARK-Ansatz für Sicherheit und Schutz . Addison-Wesley. ISBN 0-321-13616-0Die
Externe Links
- Ada Resource Association
- DOD Ada Programmiersprache (ANSI/MIL STD 1815A-1983) Spezifikation
- JTC1/SC22/WG9 ISO-Heimat der ADA-Standards
- Materialien zur Programmiersprache Ada, 1981–1990 . Charles Babbage Institut , Universität von Minnesota.
- Verteidigungsministerium (Juni 1978), Anforderungen an höhere Programmiersprachen: „Steelman“
- David A. Wheeler (1996), Einführung in Steelman On-Line (Version 1.2).
- SoftTech Inc. (1976), „Evaluation of ALGOL 68, JOVIAL J3B, Pascal, Simula 67, and TACPOL Versus TINMAN - Requirements for a Common High Order Programming Language." - Siehe auch: ALGOL 68 , JOVIAL J3B, Pascal , Simula 67, and TACPOL (Defense Technical Information Center - DTIC ADA037637, Report Number 1021-14).
- David A. Wheeler (1997), „Ada, C, C++ und Java vs. The Steelman“ . Ursprünglich veröffentlicht in Ada Letters Juli/August 1997.