Ada Resource Association

Ada Übersicht

Ada ist eine moderne Programmiersprache, die für große, langlebige Anwendungen – und insbesondere eingebettete Systeme – entwickelt wurde, bei denen Zuverlässigkeit und Effizienz von entscheidender Bedeutung sind. Es wurde ursprünglich in den frühen 1980er Jahren von einem Team unter der Leitung von Dr. Jean Ichbiah am CII-Honeywell-Bull in Frankreich entwickelt (diese Version ist allgemein als Ada 83 bekannt). Die Sprache wurde Anfang der 1990er Jahre unter der Leitung von Tucker Taft von Intermetrics in den USA aufwärtskompatibel überarbeitet und verbessert. Die resultierende Sprache, Ada 95, war die erste international standardisierte (ISO) objektorientierte Sprache. Unter der Schirmherrschaft der ISO wurde eine weitere (kleinere) Revision als Änderung des Standards abgeschlossen; Diese Version der Sprache ist als Ada 2005 bekannt. Eine bedeutendere Überarbeitung wurde abgeschlossen (einschließlich Unterstützung für Programmanmerkungen) und wird als Ada 2012 bezeichnet. Eine weitere bedeutende Überarbeitung wird voraussichtlich 2022 abgeschlossen sein.

Der Name “Ada” ist kein Akronym; es wurde zu Ehren von Augusta Ada Lovelace (1815-1852) gewählt, einer Mathematikerin, die wegen ihrer Arbeit mit Charles Babbage manchmal als die erste Programmiererin der Welt angesehen wird. Sie war die Tochter des Dichters Lord Byron.

Ada wird weltweit in Bereichen mit hoher Integrität / Sicherheitskritik / hoher Sicherheit eingesetzt, darunter Avionik für kommerzielle und militärische Flugzeuge, Flugsicherung, Eisenbahnsysteme und medizinische Geräte. Mit seiner Verkörperung moderner Software-Engineering-Prinzipien ist Ada eine ausgezeichnete Unterrichtssprache sowohl für Einführungs- als auch für fortgeschrittene Informatikkurse und war Gegenstand bedeutender universitärer Forschung, insbesondere im Bereich der Echtzeittechnologien.

Sprachübersicht

Ada ist facettenreich. Aus einer Perspektive ist es eine klassische stapelbasierte Allzwecksprache, die nicht an eine bestimmte Entwicklungsmethodik gebunden ist. Es verfügt über eine einfache Syntax, strukturierte Steueranweisungen, flexible Datenkompositionsmöglichkeiten, eine starke Typprüfung, traditionelle Funktionen für die Codemodularisierung (“Unterprogramme”) und einen Mechanismus zum Erkennen und Reagieren auf außergewöhnliche Laufzeitbedingungen (“Ausnahmebehandlung”).

Aber es enthält auch viel mehr:

Skalarbereiche

Im Gegensatz zu Sprachen, die auf der C-Syntax basieren (wie C ++, Java und C #), ermöglicht Ada dem Programmierer, einfach und explizit den Wertebereich anzugeben, der für Variablen von Skalartypen (Ganzzahl-, Gleitkomma-, Festkomma- oder Aufzählungstypen) zulässig ist. Die versuchte Zuweisung eines Werts außerhalb des Bereichs verursacht einen Laufzeitfehler. Die Möglichkeit, Bereichsbeschränkungen anzugeben, macht die Absicht des Programmierers explizit und erleichtert das Erkennen einer Hauptquelle für Codierungs- und Benutzereingabefehler.

Programmierung im großen

Das ursprüngliche Ada 83-Design führte das Paketkonstrukt ein, eine Funktion, die Kapselung (“Informationsverstecken”) und Modularisierung unterstützt und es dem Entwickler ermöglicht, den Namespace zu steuern, auf den innerhalb einer bestimmten Kompilierungseinheit zugegriffen werden kann. Ada 95 führte das Konzept der “untergeordneten Einheiten” ein, was die Flexibilität erheblich erhöhte und das Design sehr großer Systeme erleichterte. Ada 2005 erweiterte die Modularisierungsmöglichkeiten der Sprache, indem gegenseitige Referenzen zwischen Paketspezifikationen ermöglicht wurden, wodurch die Schnittstelle zu Sprachen wie Java erleichtert wurde.

Generische Vorlagen

Ein Schlüssel zu wiederverwendbaren Komponenten ist ein Mechanismus zum Parametrieren von Modulen in Bezug auf Datentypen und andere Programmentitäten, beispielsweise ein Stapelpaket für einen beliebigen Elementtyp. Ada erfüllt diese Anforderung durch eine als “Generika” bekannte Einrichtung; Da die Parametrisierung zur Kompilierungszeit erfolgt, wird die Laufzeitleistung nicht beeinträchtigt.

Objektorientierte Programmierung (OOP)

Ada 83 war objektbasiert und ermöglichte die Partitionierung eines Systems in Module, die abstrakten Datentypen oder abstrakten Objekten entsprachen. Eine vollständige OOP-Unterstützung wurde nicht bereitgestellt, da sie erstens in der Echtzeitdomäne, die das Hauptziel von Ada war, nicht erforderlich zu sein schien und zweitens die offensichtliche Notwendigkeit einer automatischen Speicherbereinigung in einer OO-Sprache die vorhersehbare und effiziente Leistung beeinträchtigt hätte.

Große Echtzeitsysteme verfügen jedoch häufig über Komponenten wie GUIs, die keine Echtzeitbeschränkungen aufweisen und mit OOP-Funktionen am effektivsten entwickelt werden können. Zum Teil aus diesem Grund bietet Ada 95 umfassende Unterstützung für OOP durch seine “Tagged type” -Funktion: Klassen, Polymorphismus, Vererbung und dynamische Bindung. Ada 95 erfordert keine automatische Speicherbereinigung, sondern liefert Definitionsmerkmale, die es dem Entwickler ermöglichen, typspezifische Speicherrückgewinnungsoperationen (“Finalisierung”) bereitzustellen. Ada 2005 bot zusätzliche OOP-Funktionen, einschließlich Java-ähnlicher Schnittstellen und traditioneller Operationsaufrufnotation.

Ada ist methodisch neutral und legt keinen “verteilten Overhead” für OOP fest. Wenn eine Anwendung OOP nicht benötigt, müssen die OOP-Funktionen nicht verwendet werden, und es gibt keine Laufzeitstrafe.

Concurrent programming

Ada bietet eine strukturierte, hochrangige Einrichtung für Parallelität. Die Einheit der Parallelität ist eine Programmentität, die als “Task” bezeichnet wird.” Aufgaben können implizit über gemeinsam genutzte Daten oder explizit über einen synchronen Steuerungsmechanismus kommunizieren, der als Rendezvous bezeichnet wird. Ein gemeinsames Datenelement kann abstrakt als “geschütztes Objekt” definiert werden (eine in Ada 95 eingeführte Funktion), wobei Operationen unter gegenseitigem Ausschluss ausgeführt werden, wenn sie von mehreren Aufgaben aufgerufen werden. Asynchrone Task-Interaktionen werden ebenfalls unterstützt, insbesondere Timeouts und Task-Beendigung. Ein solches asynchrones Verhalten wird während bestimmter Vorgänge zurückgestellt, um zu verhindern, dass gemeinsam genutzte Daten in einem inkonsistenten Zustand verbleiben. Die neuesten Versionen von Ada enthalten leichte Mechanismen, um die Vorteile von Multicore-Architekturen zu nutzen, die hocheffizientes paralleles Rechnen ermöglichen, während die Portabilität erhalten bleibt und das sichere und genau definierte Ada-Parallelitätsmodell erhalten bleibt.

Systemprogrammierung

Sowohl in der “Kernsprache” als auch im Anhang zur Systemprogrammierung bietet Ada die notwendigen Funktionen, um dem Programmierer die Nähe zur Hardware zu ermöglichen. Sie können beispielsweise das Bitlayout für Felder in einem Datensatz angeben, die Ausrichtung und Größe definieren, Daten an bestimmten Maschinenadressen platzieren und spezialisierte oder zeitkritische Codesequenzen in Assemblersprache ausdrücken. Sie können auch Interrupt-Handler in Ada schreiben, indem Sie die protected type-Funktion verwenden.

Echtzeitprogrammierung

Mit den Tasking-Funktionen von Ada können Sie gängige Echtzeit-Idiome ausdrücken (periodische Aufgaben, ereignisgesteuerte Aufgaben), und der Echtzeit-Anhang bietet mehrere Funktionen, mit denen Sie unbegrenzte Prioritätsinversionen vermeiden können. Dies ist in Ada besonders effizient implementiert (Mutexe sind nicht erforderlich), da geschützte Vorgänge nicht blockiert werden dürfen. Ada 95 definierte eine Aufgabenverteilungspolitik, die im Grunde erfordert, dass Aufgaben ausgeführt werden, bis sie blockiert oder vorbelegt sind, und Ada 2005 führte mehrere andere ein, einschließlich der frühesten Frist zuerst.

Hochintegrierte Systeme

Mit dem Schwerpunkt auf soliden Software-Engineering-Prinzipien unterstützt Ada die Entwicklung hochintegrierter Anwendungen, einschließlich solcher, die nach Sicherheitsstandards wie DO-178B und Sicherheitsstandards wie den Common Criteria zertifiziert werden müssen. Starke Typisierung bedeutet beispielsweise, dass auf Daten, die für einen bestimmten Zweck bestimmt sind, nicht über unangemessene Operationen zugegriffen wird; Fehler wie die Behandlung von Zeigern als Ganzzahlen (oder umgekehrt) werden verhindert. Und Adas Array Bounds Checking verhindert Pufferüberlauf-Schwachstellen, die in C und C ++ üblich sind.

Die vollständige Sprache ist jedoch in einer sicherheitskritischen Anwendung ungeeignet, da die Allgemeinheit und Flexibilität die Rückverfolgbarkeits- / Zertifizierungsanforderungen beeinträchtigen können. Ada behebt dieses Problem, indem es eine Compiler-Direktive, pragma Restrictions , bereitstellt, mit der Sie die Sprachfunktionen auf eine genau definierte Teilmenge beschränken können (z. B. dynamische OOP-Funktionen ausschließen).

Die Entwicklung von Ada hat die Unterstützung für sicherheitskritische und Hochsicherheitsanwendungen weiter erhöht. Ada 2005 standardisierte das Ravenscar-Profil, eine Sammlung von Parallelitätsfunktionen, die leistungsstark genug für die Echtzeitprogrammierung sind, aber einfach genug, um die Zertifizierung praktisch zu gestalten. Ada 2012 führte Annotationsmöglichkeiten zum Hinzufügen von Vorbedingungen, Nachbedingungen und Invarianten zu Programmen ein. Ada 2022 erweitert diese um zusätzliche Anmerkungen für die Standardanfangsbedingungen, stabile Eigenschaften, nicht blockierende und globale Objektverwendung. Diese können sowohl zur Laufzeitprüfung als auch als Eingabe in statische Analysetools dienen.

Zusammenfassung der Ada-Vorteile

  • Hilft Ihnen, sicheren und zuverlässigen Code zu entwerfen
  • Reduziert die Entwicklungskosten
  • Unterstützt neue und sich ändernde Technologien
  • Erleichtert die Entwicklung komplexer Programme
  • Hilft, Code lesbar und portabel zu machen
  • Reduziert die Zertifizierungskosten für sicherheitskritische software

Zusammenfassung der Ada-Funktionen

  • Objektorientierte Programmierung
  • Starke Typisierung
  • Abstraktionen zur Anpassung der Programmdomäne
  • Generische Programmierung / Vorlagen
  • Ausnahme handhabung
  • Möglichkeiten zur modularen Organisation von Code
  • Standardbibliotheken für E / A, String-Handling, numerisches Rechnen, Container
  • Systemprogrammierung
  • Gleichzeitige Programmierung
  • Echtzeitprogrammierung
  • Programmierung verteilter Systeme
  • Numerische Verarbeitung
  • Schnittstellen zu anderen Sprachen (C, COBOL, Fortran)

Kurz gesagt, Ada ist eine international standardisierte Sprache, die objektorientierte Programmierfunktionen, ausgereifte Parallelitätsfunktionen, Echtzeitunterstützung und integrierte Funktionen kombiniert Zuverlässigkeit. Ada ist ein geeignetes Werkzeug, um die wirklichen Probleme anzugehen, mit denen Softwareentwickler heute konfrontiert sind, und wird in einer Reihe wichtiger Branchen eingesetzt, um Software zu entwickeln, die Unternehmen und Leben schützt.

Teilen und genießen:
  •  e-Mail-Adresse
  •  XING
  •  Auf Twitter
  •  Auf Facebook
  •  Digg
  •  RWTH AACHEN

Leave a Reply