Die Version DMD 2.111, des Referenzcompilers für die Sprache D, wurde veröffentlicht. Der Compiler-Code wird unter der freien BSL (Boost Software License) lizenziert. Unterstützte Systeme sind Linux, Windows, macOS und FreeBSD.
Die Sprache D verwendet statische Typisierung, hat eine Syntax, die C/C++ ähnlich ist, und bietet die Leistung von kompilierenden Sprachen. Die Sprache D übernimmt auch einige Funktionen dynamischer Sprachen, die sich positiv auf die Effizienz der Entwicklung und die Sicherheit auswirken. Beispielsweise wird die Unterstützung folgender Elemente geboten: assoziative Arrays, indirekte Typdefinition, automatisches Speichermanagement, Werkzeuge für paralleles Programmieren, Templates sowie Komponenten für Metaprogrammierung. Ein Garbage Collector ist optional verfügbar. In D-Programmen können Bibliotheken in C sowie einige Bibliotheken in C++ und Objective-C verwendet werden.
Die Veröffentlichung umfasst Änderungen aus mehr als einem halben Jahr, die nicht in die Version 2.110 aufgenommen wurden, die eher eine Korrekturversion war und nur Fehlerbehebungen enthielt. Zu den Änderungen in der Version 2.111 gehören:
- Eine Profilierungsfunktion für die Build-Zeit wurde hinzugefügt, die über die Flagge „-ftime-trace“ im DMD-Compiler aktiviert wird. Der LDC-Compiler hatte diese Funktion bereits. Ein Video mit einer Anleitung zur Verwendung von time-trace.
- Die Compiler-Flagge „-i“ verarbeitet jetzt auch C-Dateien korrekt.
- In die Template-Mixe wurde die Möglichkeit hinzugefügt, die Zuweisungssyntax zu verwenden: mixin MyMixinTemplate!(Args) myName; // alter Stil mixin myName = MyMixinTemplate!(Args); // neuer Stil
- Für Methoden „extern(Objective-C)“ werden jetzt automatisch Selektoren generiert, auch wenn das Attribut „@selector“ nicht angegeben ist: extern(Objective-C) extern class NSObject { static NSObject alloc(); // Wird als „alloc“ generiert NSObject init(); // Wird als „init“ generiert } extern(Objective-C) class Fox : NSObject { bool fluffy; @property bool isFluffy() => fluffy; // „isFluffy“ @property void isFluffy(bool value) { fluffy = value; } // „setFluffy:“ void yip(int a) @selector(„bark:“) { // „bark:“ // … } void doSomething(int a, int b, int c) { // „doSomething:b:c:“ // … } }
- Der Placement-Operator „new“ wurde hinzugefügt, um mit einem angegebenen Wert zu initialisieren (ohne GC). struct S { float d; int i; char c; } … S s; S* p = new (s) S(3.14, 42, ‘X’); // neues Objekt in s platzieren
- Ein neues Schlüsselwort „__rvalue“ wurde eingeführt, um die Move-Semantik zu implementieren. Dies wurde verwendet, um die Bibliotheksprimitive „move“ und „forward“ hinzuzufügen.
- Die Flagge „-preview=safer“ wurde hinzugefügt, bei deren Verwendung alle Prüfungen, die im Code „@safe“ angewendet werden, für den gesamten Code aktiviert werden. Dabei bleiben schwer zu korrigierende Teile (wie der Aufruf von Funktionen „@system“) im Safer D-Modus weiterhin erlaubt.
- Die Unterstützung für „ref“- und „auto ref“-Datentypen wurde verbessert, die jetzt auf lokale, globale und statische Variablen angewendet werden können. Die Parameter „auto ref“ sollten nur gemeinsam definiert werden.
- Die Fehlerausgabe für einige Funktionen, die als veraltet gelten, wurde aktiviert. Dazu gehören das Ersetzen von „delete“ durch „destroy“, das „Durchfallen“ in mehrwertigen „case“-Anweisungen und die Selbstinitialisierung von Variablen.
- Die verkürzte Syntax zur Definition von Methoden kann jetzt auch in Konstruktoren verwendet werden: struct Number { int x; void vf(int); this(int x) => vf(x); this(float x) => this(cast(int) x); }
- Windows-Bindungen für BCrypt wurden in Runtime hinzugefügt.
- In die Standardbibliothek wurde der Import von ODBC 4.0 implementiert und die Methoden zur Bearbeitung von Unicode erweitert, dessen Version auf 16 erhöht wurde.
- Eine neue API für „std.sumtype“ wurde eingeführt, die drei Funktionen „has!T“, „get!T“ und „tryGet!T“ enthält.
- Im Paketmanager dub wurde ein Fehler mit „cImportPaths“ behoben.
Zusätzlich kann die Entwicklung einer Reihe größerer Projekte in der Programmiersprache D hervorgehoben werden:
Im Bereich der Spieleentwicklung (GameDev) befinden sich mehrere Engines in der Entwicklung: HipremeEngine — eine plattformübergreifende Engine, die zusätzlich zu den wichtigsten Desktop-Systemen Windows/Linux/macOS auch iOS/Android/Xbox/WebAssembly/PS Vita unterstützt. Ein weiteres Projekt — Dagon, entwickelt einen 3D-Engine mit umfangreichen Grafikfunktionen weiter.
Im Bereich der Grafikbibliotheken wird neben OpenGL die Unterstützung solcher Bibliotheken wie SDL (einschließlich der Versionen 3 und 2) und Sokol weiterentwickelt. Die Arbeit mit Grafikbildern (Decodierung/Encodierung) entwickelt sich im Paket gamut, das mit vielen Formaten arbeiten kann. Es gibt Unterstützung für klassische Formate wie PNG, JPEG und BMP sowie für modernere wie JPEG-XL, QOI und QOIX.
Für die Erstellung von grafischen Benutzeroberflächen (GUI) wurde ein neues Ökosystem von Bibliotheken gID geschaffen, das Bindings zu vielen auf GObject basierenden Bibliotheken bereitstellt, einschließlich vollständiger Unterstützung für GTK 3/4, Arrow/Parquet und Adw. Beispiele und eine Liste der eingehenden Bibliotheken sind im Repository zu finden. Auch das deklarative Framework Fluid, das in Spielen eingesetzt werden kann, gewinnt an Beliebtheit.
Im Bereich der Webentwicklung wurde auf der RISC-V-Architektur die Funktionsweise des minimalistischen und leistungsstarken Web-Frameworks Serverino demonstriert, das ohne weitere Abhängigkeiten auf sehr schwachen Maschinen laufen kann, einschließlich einiger eingebetteter Systeme mit begrenztem Speicher.
Die Entwicklung der Bibliothek für Puppen-2D-Animation in Echtzeit — Inochi2D geht weiter. Zu den jüngsten Neuheiten des Projekts gehören separate Speicherverwaltung-Bibliotheken und eine eigene Runtime, die viele Funktionen der Sprache ohne Garbage Collector nutzen lassen.
Quelle: opennet.ru
