Neueste D-Compiler

Das LDC-Entwicklungsteam schloss letztes Jahr mit Version 1.19.0 des D-Compilers unter Verwendung von LLVM , und das Kernteam startete das neue Jahr mit Version 2.090.0 des DMD-Referenz-Compilers . Und wenn Sie nicht gehört haben, gab es vor nicht allzu langer Zeit wichtige Neuigkeiten über den D-Compiler, der auf GCC, GDC basiert . Schminke!

LDC 1.19.0


Diese Version enthält ein Update des LDC-Compilers auf Version D des Frontends 2.089.1, die zum Zeitpunkt der Veröffentlichung unmittelbar nach katholischer Weihnacht die aktuelle Version war. Zusammengesetzte Baugruppen basieren auf LLVM 9.01 .

Zu den Highlights in dieser Version gehört Sympathie für Android. Die fertige DRuntime / Phobos-Bibliothek ist jetzt für alle Android-Ziele verfügbar. Diese Version kann in Verbindung mit Adam Ruppes Android Project D verwendet werden , einer Sammlung von Hilfsprogrammen und Benutzeroberflächen, die sich in der Beta- Phase befinden und für die Entwicklung auf Android D mit LDC vorgesehen sind.

Windows-Benutzer werden feststellen, dass die mitgelieferten MinGW-basierten Linkbibliotheken aktualisiert wurden. Jetzt werden sie von .def- Dateien aus dem MinGW-w64 7.0.0- Paket abgeleitet. Mit diesen Bibliotheken können Sie die Windows-Systembibliotheken verwenden, ohne das Windows SDK installieren zu müssen.

DMD 2.090.0


Die neueste Version von DMD wurde am 7. Januar angekündigt . Sie brachte 10 wichtige Änderungen und 71 geschlossene Bugs heraus, die freundlicherweise von 48 Co-Autoren zur Verfügung gestellt wurden .

Mit dieser Version ist jetzt mehr mit trägen Parametern möglich. D hat lange Lazy-Optionen unterstützt :
Das Argument des Parameters Lazy wird erst ausgewertet, wenn die Funktion aufgerufen wird. Das Argument wird nur verarbeitet, wenn der Parameter innerhalb der Funktion ausgewertet wird.
Daher kann das Lazy-Argument 0 oder mehrmals ausgeführt werden.
Unter der Haube werden sie als Delegierte implementiert. Jetzt können Sie zum Basisdelegierten gelangen, indem Sie die Parameteradresse verwenden, die zuvor verboten war.

import std.stdio; void chillax(lazy int x) { auto dg = &x; assert(dg() == 10); writeln(x); } void main() { chillax(2 * 5); } 

Diese Version macht auch die Redewendung D hinfällig, die von Personen verwendet wird, die zwischen Finalisierung (nicht deterministische Zerstörung von Objekten, die normalerweise vom Garbage Collector initiiert wird) und normaler Zerstörung (deterministische Zerstörung von Objekten) aus dem Inneren eines Klassen- oder Strukturdestruktors unterscheiden müssen.

Nach dem gegenwärtigen Stand der GC sind alle GC-Vorgänge während der Finalisierung verboten. D bietet jedoch keine separaten Finalizer und Destruktoren. Es gibt nur ~ this , das als Destruktor bezeichnet wird, obwohl es beide Rollen spielt. Dies führt manchmal zu Schwierigkeiten beim Implementieren von Destruktoren für Typen, die sowohl für GC- als auch für Nicht-GC-Zuweiser konzipiert sind. Jeder Aufruf des GC während der Bereinigung kann zu einem InvalidMemoryOperationError-Fehler führen. Dies impliziert die Notwendigkeit der oben genannten Problemumgehung.

Jetzt können Sie die statische GC-Funktion core.memory.GC.inFinalizer aufrufen, um Ihren Status im Destruktor abzurufen. Es wird true zurückgegeben, wenn der aktuelle Thread finalisiert wird. In diesem Fall möchten Sie keine Aktionen ausführen, die Vorgänge mit dem GC betreffen. (Ich hatte so etwas erwartet, bevor ich den nächsten Artikel in meiner GC-Serie schrieb ).

Gdc


Dank der harten Arbeit von Ian Bucklau, Johannes Pfau und all den Freiwilligen, die im Laufe der Jahre unterstützt und mitgewirkt haben, wurde die GDC Ende 2018 in GCC 9 aufgenommen und war im Rahmen des im Mai veröffentlichten GCC 9.1-Kits erhältlich. GCC 9.2 wurde im letzten August veröffentlicht. Diese Version von GDC implementiert Version 2.076 des Frontends D. Sie können es selbst erstellen oder von der gleichen Stelle installieren, an der Sie normalerweise GCC 9.x erhalten.

Vom Übersetzer


Diese Ausgabe des Blogs blockierte den Block des kommenden Artikels über zuverlässige Programmierung, einschließlich D, fast vollständig. Abgesehen von Kritik und dem Stand der Dinge mit der IDE erwies sie sich daher als äußerst erfolgreich.

Source: https://habr.com/ru/post/de483440/


All Articles