Die Entwickler der Programmiersprache D haben die Hauptversion des Referenzkompilators DMD 2.100.0 veröffentlicht, die die Systeme GNU/Linux, Windows, macOS und FreeBSD unterstützt. Der Quellcode des Kompilators wird unter der Boost Software License (BSL) verbreitet.
Die Programmiersprache D verwendet statische Typisierung, besitzt eine Syntax, die der von C/C++ ähnelt, und bietet die Leistungsfähigkeit kompilierter Sprachen, während sie einige nützliche Funktionen dynamischer Sprachen in Bezug auf Entwicklungs- und Sicherheitsaspekte übernimmt. Dazu gehört die Unterstützung für assoziative Arrays, die indirekte Typdefinition, automatisches Speichermanagement, Werkzeuge für paralleles Programmieren, ein optionaler Garbage Collector, ein Vorlagensystem, Metaprogrammierkomponenten, die Möglichkeit zur Nutzung von Bibliotheken in C sowie einige Bibliotheken in C++ und Objective-C.
Zu den Änderungen in der neuen Version gehören:
- Die Unterstützung der alten Operatorüberladung wurde in der D1-Branch eingestellt. Anstelle von opNeg, opAdd_r, opAddAssign usw. sind nun opUnary, opBinary, opBinaryRight und opOpAssign erhältlich. Die alte Stil der Operatorüberladung wurde 2019 als veraltet erklärt und führt ab Version 2.100 zu einer Fehlermeldung.
- Die Unterstützung des Schlüsselworts delete, das seit 2018 als veraltet gilt, wurde eingestellt. Stattdessen sollte die Funktion destroy oder core.memory.__delete verwendet werden.
- Ein neues Attribut @mustuse wurde eingeführt, das auf die Typen struct und union angewendet werden kann. Es dient als alternative Methode zur Fehlerbehandlung, wenn im Code keine Ausnahmen verwendet werden können (z. B. in @nogc-Blöcken). Wenn der mit dem Attribut @mustuse gekennzeichnete Ausdruck im Code nicht verwendet wird, gibt der Compiler einen Fehler aus.
- Für statische Arrays ist die Verwendung der Eigenschaft „.tupleof“ erlaubt, um eine Sequenz von Werten (lvalue) jedes Array-Elements zu erhalten. void foo(int, int, int) { /* … */ } int[3] ia = [1, 2, 3]; foo(ia.tupleof); // entspricht foo(1, 2, 3); float[3] fa; fa.tupleof = ia.tupleof; // einfache Zuweisung fa = ia führt zu einem Fehler assert(fa == [1F, 2F, 3F]);
Quelle: opennet.ru
