• IT-Karriere:
  • Services:

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. AOK Systems GmbH, Frankfurt am Main, Bonn
  2. TenneT TSO GmbH, Lehrte

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. Python kompakt - Einführung für Softwareentwickler
    19./20. April 2021, online
  2. Advanced Python - Fortgeschrittene Programmierthemen
    3./4. Mai 2021, online
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.  


Anzeige
Hardware-Angebote
  1. 499,99€

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...


Folgen Sie uns
       


Samsung Galaxy S21 Ultra vorgestellt

Das Galaxy S21 Ultra ist das Topmodell von Samsungs neuer S21-Reihe und unterscheidet sich deutlich von den beiden anderen Modellen.

Samsung Galaxy S21 Ultra vorgestellt Video aufrufen
Programm für IT-Jobeinstieg: Hoffen auf den Klebeeffekt
Programm für IT-Jobeinstieg
Hoffen auf den Klebeeffekt

Aktuell ist der Jobeinstieg für junge Ingenieure und Informatiker schwer. Um ihnen zu helfen, hat das Land Baden-Württemberg eine interessante Idee: Es macht sich selbst zur Zeitarbeitsfirma.
Ein Bericht von Peter Ilg

  1. Arbeitszeit Das Sechs-Stunden-Experiment bei Sipgate
  2. Neuorientierung im IT-Job Endlich mal machen!
  3. IT-Unternehmen Die richtige Software für ein Projekt finden

Weclapp-CTO Ertan Özdil: Wir dürfen nicht in Schönheit und Perfektion untergehen!
Weclapp-CTO Ertan Özdil
"Wir dürfen nicht in Schönheit und Perfektion untergehen!"

Der CTO von Weclapp träumt von smarter Software, die menschliches Eingreifen in der nächsten ERP-Generation reduziert. Deutschen Perfektionismus hält Ertan Özdil aber für gefährlich.
Ein Interview von Maja Hoock


    Fiat 500 als E-Auto im Test: Kleinstwagen mit großem Potenzial
    Fiat 500 als E-Auto im Test
    Kleinstwagen mit großem Potenzial

    Fiat hat einen neuen 500er entwickelt. Der Kleine fährt elektrisch - und zwar richtig gut.
    Ein Test von Peter Ilg

    1. Vierradlenkung Elektrischer GMC Hummer SUV fährt im Krabbengang seitwärts
    2. MG Cyberster MG B Roadster mit Lasergürtel und Union Jack
    3. Elektroauto E-Auto-Prämie übersteigt in 2021 schon Vorjahressumme

      •  /