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. BWI GmbH, deutschlandweit
  2. Gesellschaft für Öltechnik mbH, Waghäusel

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
Spiele-Angebote
  1. (-80%) 9,99€
  2. 4,99€
  3. (-84%) 3,99€
  4. 27,99€

demon driver 25. Jun 2019 / Themenstart

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

demon driver 24. Jun 2019 / Themenstart

Nix

SirFartALot 13. Jun 2019 / Themenstart

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

\pub\bash0r 12. Jun 2019 / Themenstart

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

kayozz 12. Jun 2019 / Themenstart

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

Kommentieren


Folgen Sie uns
       


Die Commodore-264er-Reihe angesehen

Unschlagbar günstig, unfassbar wenig RAM - der C16 konnte in vielen Belangen nicht mit dem populären C64 mithalten.

Die Commodore-264er-Reihe angesehen Video aufrufen
Timex Data Link im Retro-Test: Bill Gates' Astronauten-Smartwatch
Timex Data Link im Retro-Test
Bill Gates' Astronauten-Smartwatch

Mit der Data Link haben Timex und Microsoft bereits vor 25 Jahren die erste richtige Smartwatch vorgestellt. Sie hat es sogar bis in den Weltraum geschafft. Das Highlight ist die drahtlose Datenübertragung per flackerndem Röhrenmonitor - was wir natürlich ausprobieren mussten.
Ein Test von Tobias Költzsch

  1. Smart Watch Swatch fordert wegen kopierter Zifferblätter von Samsung Geld
  2. Wearable EU warnt vor deutscher Kinder-Smartwatch
  3. Sportuhr Fossil stellt Smartwatch mit Snapdragon 3100 vor

Dark Mode: Wann Schwarz-Weiß-Denken weiterhilft
Dark Mode
Wann Schwarz-Weiß-Denken weiterhilft

Viele Nutzer und auch Apple versprechen sich vom Dark Mode eine augenschonendere Darstellung von Bildinhalten. Doch die Funktion bringt andere Vorteile als viele denken - und sogar Nachteile, die bereits bekannte Probleme bei der Arbeit am Bildschirm noch verstärken.
Von Mike Wobker

  1. Sicherheitsprobleme Schlechte Passwörter bei Ärzten
  2. DrEd Online-Arztpraxis Zava will auch in Deutschland eröffnen
  3. Vivy & Co. Gesundheitsapps kranken an der Sicherheit

WD Blue SN500 ausprobiert: Die flotte günstige Blaue
WD Blue SN500 ausprobiert
Die flotte günstige Blaue

Mit der WD Blue SN500 bietet Western Digital eine spannende NVMe-SSD an: Das M.2-Kärtchen basiert auf einem selbst entwickelten Controller und eigenem Flash-Speicher. Das Resultat ist ein schnelles, vor allem aber günstiges Modell als bessere Alternative zu Sata-SSDs.
Von Marc Sauter

  1. WD Black SN750 ausprobiert Direkt hinter Samsungs SSDs
  2. WD Black SN750 Leicht optimierte NVMe-SSD mit 2 TByte
  3. Ultrastar DC ME200 Western Digital baut PCIe-Arbeitsspeicher mit 4 TByte

    •  /