Programmiersprachen: Durchstarten mit D

Wenn ich an die Programmiersprache D denke, fallen mir drei Wörter ein: leicht, schnell, ausdrucksstark. Passt zu meinem Auto.

Eine Anleitung von Dylan Graham veröffentlicht am
Der Autor des Textes ist ein Fan der Programmiersprache D.
Der Autor des Textes ist ein Fan der Programmiersprache D. (Bild: D Language Foundation/Montage: Golem.de)

Dieser Text ist eine Übersetzung. Das Original des Programmierers Dylan Graham ist hier zu finden.

Inhalt:
  1. Programmiersprachen: Durchstarten mit D
  2. Weitere Vorteile von D: Unit-Tests, shared, @safe

Ich fahre täglich einen Holden VZ Ute. Ich schätze ihn sehr, allerdings wurde er ab Fabrik mit einem sehr schlechten Viergang-Automatikgetriebe ausgestattet. Allein in den ersten 18 Monaten habe ich vier Getriebe kaputtgemacht. Ein neues Fahrzeug konnte ich mir nicht leisten, also musste ich kreativ werden.

Ich kaufte ein solides Sechsgang-Automatikgetriebe eines anderen Autos, wusste aber erst mal nicht, wie ich das mit meinem eigenen Auto zusammenbringen sollte. Damit es funktionierte, musste ich meine eigene Leiterplatte, mein eigenes Computersystem und meine eigene Firmware bauen. Damit sollten die Magnetspulen, die Hydraulik und die Kupplungen im Getriebe gesteuert, Benutzereingaben verarbeitet, Schaltvorgänge umgesetzt und eine Schnittstelle zu meinem Auto geschaffen werden, die vorgeben sollte, eine Viergang-Automatik zu sein.

Ich habe für all das eine Lösung gefunden und bin ziemlich stolz darauf: Ein Schaltvorgang kann in 250 Millisekunden umgesetzt werden, was für schnelles Fahren großartig ist. Der erste Gang ist recht stramm, wodurch das Auto gut beschleunigt und mitunter selbst stärkere Autos abhängt. Es gibt eine Schaltwippen-Gangschaltung, Diagnosedaten auf dem Bildschirm und die Möglichkeit, alles neu einzustellen, wann immer ich will.

Stellenmarkt
  1. Systemadministrator (m/w/d) Exchange / Mobile Kommunikation
    SIS Schweriner IT- und Servicegesellschaft mbH, Schwerin
  2. Entwickler PIM/DAM (m/w/d)
    abilex GmbH, Stuttgart, Berlin
Detailsuche

Hier ist ein sehr altes Video dazu. In dem aktuellen System ist der grässliche blaue Bildschirm nicht mehr da, der Tacho funktioniert und das Schalten ist besser geworden.

Der Rechner besteht aus zwei Teilen: der Platine für die Benutzeroberfläche, die ein OLED-Display ansteuert und einen STM32F042 verwendet, und der Hauptplatine, die alles andere übernimmt und einen STM32F407 hat. Beide arbeiten über einen CAN-Bus (Controller Area Network) zusammen. Die gesamte Firmware dafür ist in D geschrieben.

Ich habe mich für D (wie -besseresC) entschieden, weil es diese großartige einheitliche Funktionsaufruf-Syntax (Uniform Function Call Syntax, UFCS) hat, Metaprogrammierung ermöglicht und eine einfache Schnittstelle zu C bietet; außerdem habe ich es wegen der Unit-Tests, der Portabilität, wegen shared und @safe ausgesucht. Darüber hinaus gibt es eine sehr hilfsbereite, offene Community für die Sprache. Es war eine Freude, in den Foren über D zu diskutieren.

Die Vorteile von D

Die Uniform Function Call Syntax

Die UFCS hat meinen Code deutlich übersichtlicher gemacht. Er folgt genau dem Datenfluss, ohne meinen Stack mit temporären Variablen, verschachtelten Funktionsaufrufen oder anderem Kram zu belasten.

Hier ist zum Beispiel Code, den ich in meinem kommenden ECU-Projekt (Engine Control Unit) verwende:

  1. 1 immutable injectorTime = airStoich(100.kpa, 25.degCelsius)
  2. 2 .airMass
  3. 3 .fuelMass((14.7f).afr)
  4. 4 .fuelMol
  5. 5 .calculateInjectorWidth;

Diesen Code muss niemand rückwärts lesen, um ihn besser zu verstehen, es müssen keine Klammern gezählt oder Unmengen von Zwischenvariablen verwendet werden. Er ist einfach auf den Punkt.

Handbuch für Softwareentwickler: Das Standardwerk für professionelles Software Engineering

Metaprogrammierung

Viele Programmierer schwören auf das Don't-Repeat-Yourself-Prinzip (DRY). Die Metaprogrammierung von D ist ein tolles Tool, um das zu erreichen. Ich verwende es in meiner CAN-Bus-Implementierung, etwa so:

  1. 1 struct CANPacket(ushort ID) {
  2. 2 enum id = ID;
  3. 3 ubyte[8] data;
  4. 4 }
  5. 5 alias HeartbeatPacket = CANPacket!10;
  6. 6 alias BeepHornPacket = CANPacket!140;

Ich habe spezifische Alias-Typen wie HeartbeatPacket und BeepHornPacket, aber ich muss keinen Code wiederholen. Sie alle folgen der gleichen zugrundeliegenden Struktur. Wenn ich also CANPacket ändere, wird jeder Alias-Typ ebenfalls aktualisiert.

Schnittstellen zu C

Ich muss häufig mit dem HAL und dem RTOS meines Microcontrollers kommunizieren; mit der C-Schnittstelle von D ist das ganz einfach. Einfach extern(C) hinzugefügt und schon kann es losgehen.

  1. 1 extern(C) c_setPwm(int solenoid, void* userData); // declaration
  2. 2 c_setPwm(4, null); // usage, pretty easy!

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
Weitere Vorteile von D: Unit-Tests, shared, @safe 
  1. 1
  2. 2
  3.  


Aktuell auf der Startseite von Golem.de
Akkutechnik
CATL stellt erste Natrium-Ionen-Akkus für Autos vor

160 Wh pro Kilogramm. 80 Prozent Akkuladung in 15 Minuten. 90 Prozent Kapazität bei minus 20 Grad Celsius. CATL startet eine neue Ära der Akku-Technik.
Eine Analyse von Frank Wunderlich-Pfeiffer

Akkutechnik: CATL stellt erste Natrium-Ionen-Akkus für Autos vor
Artikel
  1. Erneuerbare Energien: Größte Gezeitenturbine geht vor Schottland in Betrieb
    Erneuerbare Energien
    Größte Gezeitenturbine geht vor Schottland in Betrieb

    Die Meere bieten viel Energie, die sich in elektrischen Strom wandeln lässt. In Schottland ist gerade ein neues Gezeitenkraftwerk ans Netz gegangen.

  2. Verschlüsselung: Windows-Verschlüsselung Bitlocker trotz TPM-Schutz umgangen
    Verschlüsselung
    Windows-Verschlüsselung Bitlocker trotz TPM-Schutz umgangen

    Eine mit Bitlocker verschlüsselte SSD mit TPM-Schutz lässt sich relativ einfach knacken. Ein Passwort schützt, ist aber nicht der Standard.

  3. Spionagesoftware: Israelische Behörden überprüfen Pegasus-Hersteller NSO
    Spionagesoftware
    Israelische Behörden überprüfen Pegasus-Hersteller NSO

    War es eine Razzia oder eine freundliche Besichtigung? Der diplomatische Druck auf Israel wegen des Trojaner-Herstellers NSO zeigt offenbar Wirkung.

dylangraham_ 20. Jul 2021 / Themenstart

Ok, first off, I'm a hobbyist - at least I gave this a shot... VicRoads and a certified...

Vogel22 19. Jul 2021 / Themenstart

Objektorientierung ist auch nicht das non-plus-ultra der Programmierung. Es gibt auch...

Johannes321 19. Jul 2021 / Themenstart

Eher Banane im Sinne von es ist keine weltbewegende Neuerung von D. Sieht nett aus...

gadthrawn 18. Jul 2021 / Themenstart

Bei Misra C++ hast du etliche Vorgaben, siehe z. B. https://www.autosar.org/fileadmin...

Eheran 17. Jul 2021 / Themenstart

Well done mate, shell be right!

Kommentieren



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
    Schnäppchen • Bosch Professional günstiger • Asus TUF Gaming 23,8" FHD 144Hz 169€ • Acer-Chromebooks zu Bestpreisen (u. a. 14" 64GB 229€) • Alternate (u. a. Deepcool-Gehäuselüfter ab 24,99€) • EA-Spiele (PC) günstiger (u. a. Battlefield 5 5,99€) • Philips-Fernseher 65" Ambilight 679€ [Werbung]
    •  /