Ada - Representation Clauses

Eines der Probleme der Embedded-Programmierung ist, dass einerseits hardwarenahe Programmierung und bitgenaue Auslegung der Daten nötig sind, andererseits solche Details eigentlich einfachen Code umständlich und fehleranfällig machen. Die Antwort auf dieses Problem in Ada sind Representation Clauses. Diese ermöglichen es, die bekannten Datenstrukturen wie Arrays und Records wie gewünscht im Speicher auszulegen und sie effizient und einfach zu benutzen. Ein einfaches Beispiel wäre:


          Type BitArray is array (1 .. 8) of Boolean
          with Size => 8;
            	Pragma Pack(BitArray);

Stellenmarkt
  1. Business Process Manager (m/w/d)
    Richter-Helm BioLogics GmbH & Co. KG, Bovenau
  2. Softwareentwickler:in Java / Selenium / Cloud
    HUK-COBURG Versicherungsgruppe, Coburg
Detailsuche

Die erste Zeile definiert einen Typ von Arrays, die genau 8 Boolesche Werte enthalten. Normalerweise hat der Compiler eine gewisse Wahl, wie viel Speicher genau für ein solches Array verwendet wird. Aus Effizienzgründen reserviert der Compiler zum Beispiel 8 Byte, also ein Byte pro Booleschem Wert.

Die zwei weiteren Zeilen erklären dem Compiler aber, nur 8 Bit, also 1 Byte, zu verwenden - genau 1 Bit für jeden Booleschen Wert. Das kann notwendig sein, wenn der Speicher auf dem Embedded-Chip knapp ist oder wenn eine Schnittstelle (zur Hardware oder zum Beispiel ein Kommunikationsprotokoll) die Auslegung von Daten eben genau so verlangt.

In C kann man zwar auch ein Byte für ein solches Array reservieren. Um damit umzugehen, sind dann aber Bitmasken und Bitshifts nötig - dies ist fehleranfällig und verschleiert, dass der Code einfach nur ein Array manipuliert. In Ada können solche Arrays wie oben definiert im Weiteren ganz normal verwendet werden - mit Zugriff auf jeden beliebigen Index. Der Compiler generiert automatisch den korrekten Code. Representation Clauses ermöglichen noch viel mehr, als dieses einfache Beispiel zeigt, und sind ein unverzichtbares Werkzeug für hardwarenahe Ada-Programmierer.

Ada 2012 - Design by Contract

Golem Akademie
  1. ITIL 4® Foundation: virtueller Zwei-Tage-Workshop
    16.–17. Dezember 2021, virtuell
  2. Einführung in die Programmierung mit Rust: virtueller Fünf-Halbtage-Workshop
    21.–25. März 2022, Virtuell
Weitere IT-Trainings

Seit der Ada-2012-Sprachversion unterstützt Ada Design by Contract. Diese Art der Programmierung umfasst in der Regel eine Reihe von Sprachfeatures ähnlich den Assertions. Zum Beispiel kann man in Ada mit dem Schlüsselwort "Pre" einer Funktion eine sogenannte Precondition (Vorbedingung) hinzufügen, also eine Bedingung, die vor der Ausführung der Funktion zutreffen soll. In diesem Beispiel soll die Prozedur Put_Line nur dann aufgerufen werden, wenn der übergebene Datei-Handle auch wirklich zu einer offenen Datei zeigt:


          procedure Put_Line (File : inFile_Type; Item :inString)
          with Pre => (Is_Open (File));

Diese Precondition funktioniert wie eine Assertion am Anfang der Funktion oder wie zusätzlicher Code am Anfang der Funktion, der eine bestimmte Bedingung überprüft und abbricht, falls die Bedingung nicht zutrifft (das nennt man auch Defensive Code). Der Unterschied ist aber, dass die Precondition zur Spezifikation gehört und nicht zur Implementation, wie es der Fall für die Assertion oder den Defensive Code wäre.

Dies hat einige Vorteile. Zum einen, zum Beispiel im Fall einer API-Funktion einer Bibliothek, ist die Precondition auch für Benutzer der API sichtbar, während die anderen Ansätze letztendlich ein Implementationsdetail bleiben. Damit kann die Precondition auch als Dokumentation für akzeptable Aufrufe der Funktion dienen. Zum anderen kann die Precondition, ähnlich wie Assertions in anderen Sprachen, für einen Release-Build abgeschaltet werden, um effizienteren Code zu erhalten. Defensive Code wird immer mitkompiliert. Schließlich kann die Precondition auch von anderen Tools verwendet werden. Insbesondere Spark wird mithilfe von Contracts zu einem mächtigen Werkzeug.

Analog zu Preconditions gibt es auch Postconditions, die konzeptuell direkt nach dem Return der Funktion überprüft werden. Der Name Design by Contract kommt von dem Zusammenspiel von Pre- und Postcondition. Hat der Programmierer beide zu einer Funktion hinzugefügt, fungieren sie wie ein Vertrag zwischen aufrufender und aufgerufener Funktion. Die aufrufende Funktion muss gemäß diesem Vertrag die Precondition garantieren und bekommt im Gegenzug von der aufgerufenen Funktion die Postcondition garantiert. Es gibt noch einige andere Formen von Assertions, sie zu beschreiben würde aber an dieser Stelle zu weit führen.

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
 Ada - numerische TypenSpark kann automatisch potenzielle Fehler anzeigen 
  1.  
  2. 1
  3. 2
  4. 3
  5. 4
  6.  


demon driver 25. Jun 2019

Von "unabgängiger" kann sich niemand was kaufen, und konsequent dürfte man dann nur noch...

demon driver 24. Jun 2019

Nix

SirFartALot 13. Jun 2019

das mag ja fuer Auftragsprogrammierer oder Freelancer normal zu sein, die...

\pub\bash0r 12. Jun 2019

Wobei ausgerechnet Java (und Applets) eigentlich ein sehr gutes Sicherheitsmodell haben...

kayozz 12. Jun 2019

Ja, C# bzw. .NET hat auch Schwächen. Aber das Argument würde ich so nicht stehen...



Aktuell auf der Startseite von Golem.de
Kanadische Polizei
Diebe nutzen Apples Airtags zum Tracking von Luxuswagen

Autodiebe in Kanada nutzen offenbar Apples Airtags, um Fahrzeuge heimlich zu orten.

Kanadische Polizei: Diebe nutzen Apples Airtags zum Tracking von Luxuswagen
Artikel
  1. Blender Foundation: Blender 3.0 ist da
    Blender Foundation
    Blender 3.0 ist da

    Die freie 3D-Software Blender bekommt ein Update - wir haben es uns angesehen.
    Von Martin Wolf

  2. 4 Motoren und 4-Rad-Lenkung: Tesla aktualisiert Cybertruck
    4 Motoren und 4-Rad-Lenkung
    Tesla aktualisiert Cybertruck

    Tesla-Chef Elon Musk hat einige Änderungen am Cybertruck angekündigt. Der elektrische Pick-up-Truck wird mit vier Motoren ausgerüstet.

  3. DSIRF: Hackerbehörde Zitis prüft österreichischen Staatstrojaner
    DSIRF
    Hackerbehörde Zitis prüft österreichischen Staatstrojaner

    Deutsche Behörden sind mit mehreren Staatstrojaner-Herstellern im Gespräch. Nun ist ein weiterer mit Sitz in Wien bekanntgeworden.

Du willst dich mit Golem.de beruflich verändern oder weiterbilden?
Zum Stellenmarkt
Zur Akademie
Zum Coaching
  • Schnäppchen, Rabatte und Top-Angebote
    Die besten Deals des Tages
    Daily Deals • Saturn-Advent: SanDisk Ultra 3D 1 TB 77€ • KFA2 Geforce RTX 3070 OC 8GB 1.019€ • Alternate (u. a. AKRacing Core SX 269,98€) • Sharkoon PureWriter RGB 44,90€ • Corsair K70 RGB MK.2 139,99€ • 2x Canton Plus GX.3 49€ • Gaming-Monitore günstiger (u. a. Samsung G3 27" 144Hz 219€) [Werbung]
    •  /