Abo
  • IT-Karriere:

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. combine Consulting GmbH, Hamburg, München
  2. Enertrag Aktiengesellschaft, Dauerthal

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

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.

 Ada - numerische TypenSpark kann automatisch potenzielle Fehler anzeigen 
  1.  
  2. 1
  3. 2
  4. 3
  5. 4
  6.  


Anzeige
Top-Angebote
  1. ab 794,99€ und damit günstiger als bei Apple (Release am 20.09.)
  2. ab 1.144,99€ und damit günstiger als bei Apple (Release am 20.09.)
  3. ab 1.244,99€ und damit günstiger als bei Apple (Release am 20.09.)
  4. 189,00€

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
       


Asus Studiobook Pro X (Ifa 2019)

Das Studiobook Pro X ist mit Xeon-Prozessor, Quadro GPU und einem Preis von 4300 Euro eindeutig auf professionelle Anwender ausgerichtet.

Asus Studiobook Pro X (Ifa 2019) Video aufrufen
Ryzen 7 3800X im Test: Der schluckt zu viel
Ryzen 7 3800X im Test
"Der schluckt zu viel"

Minimal mehr Takt, vor allem aber ein höheres Power-Budget für gestiegene Frequenzen unter Last: Das war unsere Vorstellung vor dem Test des Ryzen 7 3800X. Doch die Achtkern-CPU überrascht negativ, weil AMD es beim günstigeren 3700X bereits ziemlich gut meinte.
Ein Test von Marc Sauter

  1. Agesa 1003abba Microcode-Update taktet Ryzen 3000 um 50 MHz höher
  2. Agesa 1003abb Viele ältere Platinen erhalten aktuelles UEFI für Ryzen 3000
  3. Ryzen 5 3400G und Ryzen 3 3200G im Test Picasso passt

Dick Pics: Penis oder kein Penis?
Dick Pics
Penis oder kein Penis?

Eine Studentin arbeitet an einer Software, die automatisch Bilder von Penissen aus Direktnachrichten filtert. Wer mithelfen will, kann ihr Testobjekte schicken.
Ein Bericht von Fabian A. Scherschel

  1. Medienbericht US-Regierung will soziale Netzwerke stärker überwachen
  2. Soziales Netzwerk Openbook heißt jetzt Okuna
  3. EU-Wahl Spitzenkandidat Manfred Weber für Klarnamenpflicht im Netz

Elektrautos auf der IAA: Die Gezeigtwagen-Messe
Elektrautos auf der IAA
Die Gezeigtwagen-Messe

IAA 2019 Viele klassische Hersteller fehlen bei der IAA oder zeigen Autos, die man längst gesehen hat. Bei den Elektroautos bekommen alltagstaugliche Modelle wie VW ID.3, Opel Corsa E und Honda E viel Aufmerksamkeit.
Ein Bericht von Dirk Kunde

  1. Elektromobilität Stromwirtschaft will keine Million öffentlicher Ladesäulen
  2. Umfrage Kunden fühlen sich vor Elektroautokauf schlecht beraten
  3. Batterieprobleme Auslieferung des e.Go verzögert sich

    •  /