Programmiersprache D: Compiler DMD unterstützt das Debugging-Datenformat DWARF
Version 2.096 des Referenz-Compilers für D hat 17 größere Neuerungen an Bord. Unter anderem gilt das experimentelle Generieren von C++-Headern als verbessert.
![](https://heise.cloudimg.io/width/610/q85.png-lossy-85.webp-lossy-85.foil1/_www-heise-de_/imgs/18/3/0/7/7/7/6/8/5b288aeac90900504fb41218fe672956_large-139260823bcddd2f.jpeg)
(Bild: Other Side Entertainment)
- Silke Hahn
Der Refenz-Compiler für die Programmiersprache D liegt in Version 2.096 vor. Das Release wartet mit 17 größeren Änderungen und 81 Problembehebungen auf. Im flankierenden Blogeintrag heben die Herausgeber drei Neuerungen hervor, die für die D-Community besonders relevant sein dürften.
Unterstützung für DWARF
Der Compiler unterstützt nun Debugging-Informationen im standardisierten Datenformat DWARF, und zwar in den Versionen 3, 4 und 5. Die Unterstützung von Version 5 befindet sich noch im experimentellen Stadium. DWARF läuft laut Changelog nur auf Nicht-Windows-Geräten. Der Name des Datenformats ist komplementär zum früheren Executable and Linkable Format (ELF) entstanden und trug ursprünglich keine eigene Bedeutung, heute steht das Akronym für "Debugging With Attributed Record Formats". Nutzerinnen und Nutzer können dem Compiler mit -gdwarf=<version>
vorschreiben, welche Version des Datenformats er einsetzen soll.
Experimentelles Erzeugen von C++-Headern
DMD 2.096 kann laut Herausgebern auch Verbesserungen beim experimentellen Generieren von C++-Headern verzeichnen. Der Header Generator kann der Ankündigung zufolge Konstruktoren für Aggregate feldweise generieren, er gibt keine Enums aus für opaque Typen (die der Compiler separat zu handhaben hat) und auch keine instanziierten Klassen als einzige Klassendeklaration. Template-Argumente für instanziierte Basisklassen gibt er hingegen aus. Der Header Generator befindet sich noch im experimentellen Stadium, wie die Herausgeber betonen.
Als dritte Neuerung sei die Fähigkeit des D-Compilers genannt, mit reinen synchronized
-Statements Laufzeit-allokierte Mutexe zu nutzen. Damit gilt ein kritisches Problem als behoben. Es bestand darin, dass synchronisierte Statements in zwei Formen auftreten können, als synchronized
oder als synchronized(exp)
. Wenn das Expression-Argument fehlt, erstellt das Programm automatisch einen globalen Mutex, der statischen Puffer nutzt, um die für die Plattform wesentlichen Sektionstypen und Pointer-Felder zu speichern.
Critsec: Logik aus dem Compiler in die Runtime verlagert
Diese Implementierung ist fehleranfällig, da weder die Größe noch die Ausrichtung des critsec
-Puffers aus dem in der D-Runtime definierten critsec
-Typen bezogen werden. Ist die vom Compiler zugewiesene Puffergröße zum Beispiel zu klein, stürzt die Runtime bei der Eingabe einer synchronisierten Anweisung ab. In der aktuellen Version des D-Compilers ruft der Code hingegen eine neue Implementierung auf, die den kritischen Abschnitt zur Laufzeit verzögert allokiert und die Logik aus dem Compiler in die Runtime verlagert.
Neues von den mit C kompatiblen komplexen Typen
Die komplexen Typen cfloat
, cdouble
und creal
, die schon lange Teil von D sind, stehen fast genauso lange auf der Deprecation-Abschussliste. Ihr Erhalt ist mit hohen Maintenance-Kosten verbunden, geht aus dem Blogeintrag hervor. Zwar sind sie bis auf Weiteres noch nicht als deprecated (überholt) deklariert, aber Entwicklerinnen und Entwickler sollten D-Code nun stattdessen mit std.complex
schreiben. Offenbar ist dieser Library-Typ nicht kompatibel zu den komplexen Typen von C. Das Release von DMD führt nun drei Aliastypen ein, die zur Compilezeit automatisch kompatibel konfigurierbar sind zu den komplexen Typen von C: c_complex_float
, c_complex_double
und c_complex_real
.
(Bild: Peshkova/Shutterstock.com)
Multiparadigmensprache: Programmieren in D
- Die Programmiersprache D ist eine Nischensprache, bietet aber interessante Features. Der Artikel stellt einige davon im Einsatz vor.
Weitere Änderungen betreffen den Postblit Constructor: Beim Schreiben neuen Codes sollte man eher Konstruktoren als Postblits verwenden, lautet die aktuelle Empfehlung (wenngleich Postblit nicht offiziell als überholt verrufen wird). Der Blogeintrag der D-Entwickler gibt auch einen Ausblick auf kommende Neuerungen: So steht das Release eines LLVM-basierten D-Compilers namens LDC bevor (momentan in der Betaphase), die nächste Beta soll bereits D 2.096 unterstützen. Auch von GDC zeichnet sich ein bevorstehendes Release schon ab.
Weiterführende Hinweise
Die Ankündigung im Dlang-Blog listet die Neuerungen ausführlicher und mit Codebeispielen auf. Sie enthält außerdem einen Nachklapp zum Symmetry Autumn of Code und führt Ressourcen auf, in die sich an der Programmiersprache D Interessierte weiter vertiefen können. Die vollständige Liste aller Änderungen bietet das Changelog.
(sih)