Veröffentlichung der GCC 13-Compiler-Suite

Nach einem Jahr der Entwicklung wurde die Veröffentlichung der kostenlosen GCC 13.1-Compiler-Suite veröffentlicht, die erste bedeutende Veröffentlichung im neuen GCC 13.x-Zweig. Unter dem neuen Release-Nummerierungsschema wurde während der Entwicklung Version 13.0 verwendet, und kurz vor der Veröffentlichung von GCC 13.1 wurde der GCC 14.0-Zweig bereits gespalten, aus dem die nächste bedeutende Version von GCC 14.1 gebildet wird.

Wichtigste Änderungen:

  • Das GCC hat ein Frontend zum Erstellen von Programmen in der Programmiersprache Modula-2 eingeführt. Es unterstützt die Erstellung von Code, der den Dialekten PIM2, PIM3 und PIM4 sowie dem akzeptierten ISO-Standard für diese Sprache entspricht.
  • Dem GCC-Quellbaum wurde ein Frontend mit der vom gccrs-Projekt (GCC Rust) vorbereiteten Implementierung des Rust-Sprachcompilers hinzugefügt. In der aktuellen Ansicht ist das Forntend standardmäßig als experimentell markiert und deaktiviert. Sobald das Frontend fertig ist (erwartet in der nächsten Version), kann das Standard-GCC-Toolkit zum Kompilieren von Rust-Programmen verwendet werden, ohne dass der mit LLVM-Entwicklungen erstellte Rustc-Compiler installiert werden muss.
  • Link-in-Step Optimization (LTO) bietet Unterstützung für einen Jobserver (Jobserver), der vom GNU-Make-Projekt verwaltet wird, um die parallele Build-Ausführung über mehrere Threads hinweg zu optimieren. In GCC wird der Jobserver verwendet, um die Arbeit während der LTO-Optimierung im Kontext des gesamten Programms (WPA, Whole-Program Analysis) zu parallelisieren. Für die Interaktion mit dem Jobserver werden standardmäßig benannte Pipes (--jobserver-style=fifo) verwendet.
  • Der statische Analysator (-fanalyzer) bietet 20 neue Diagnoseprüfungen, darunter „-Wanalyzer-out-of-bounds“, „-Wanalyzer-allocation-size“, „-Wanalyzer-deref-before-check“, „-Wanalyzer-infinite“. -recursion" -Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak".
  • Die Möglichkeit, Diagnosen im SARIF-Format basierend auf JSON auszugeben, wurde implementiert. Das neue Format kann zum Abrufen statischer Analyseergebnisse (GCC-Fanalyzer) sowie zum Abrufen von Informationen zu Warnungen und Fehlern verwendet werden. Die Aktivierung erfolgt mit der Option „-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file“, wobei Optionen mit „json“ zu einer Ausgabe in einer GCC-spezifischen Variante des JSON-Formats führen .
  • Einige im C23-C-Standard definierte Funktionen wurden implementiert, z. B. die nullptr-Konstante zum Definieren von Nullzeigern, wodurch die Verwendung von Listen mit einer variablen Anzahl von Argumenten (variadisch) einfacher wird, die Funktionen von Aufzählungen erweitert werden und das noreturn-Attribut die Verwendung von ermöglicht constexpr und auto beim Definieren von Objekten, typeof und typeof_unqual, neue Schlüsselwörter alignas, alignof, bool, false, static_assert, thread_local und true, die leere Klammern bei der Initialisierung zulassen.
  • Einige im C++23-Standard definierte Funktionen wurden implementiert, z. B. die Möglichkeit, Markierungen am Ende zusammengesetzter Ausdrücke zu platzieren, Kompatibilität mit dem Typ char8_t, die Präprozessordirektive #warning, getrennt durch (\u{}, \o{} , \x{}) und benannte ('\N{LATEINISCHER GROSSBUCHSTABE A}') Escape-Sequenzen, statischer Operator(), statischer Operator[], Gleichheitsoperator innerhalb von Ausdrücken, Ausnahme einiger Einschränkungen bei der Verwendung von constexpr, Unterstützung für UTF-8 in Quelltexten.
  • Verbesserte experimentelle Unterstützung für C++20- und C++23-Standards in libstdc++, z. B. das Hinzufügen von Unterstützung für Header-Dateien und std::format, erweiterte Header-Dateifunktionen , zusätzliche Gleitkommatypen hinzugefügt, Header-Dateien implementiert Und .
  • Neue Funktionsattribute hinzugefügt, um zu dokumentieren, dass ein Dateideskriptor in einer Ganzzahlvariablen übergeben wird: „__attribute__((fd_arg(N)))“, „__attribute__((fd_arg_read(N)))“ und „__attribute__((fd_arg_write(N) )) ". Die angegebenen Attribute können in einem statischen Analysator (-fanalyzer) verwendet werden, um fehlerhafte Arbeit mit Dateideskriptoren zu erkennen.
  • Es wurde ein neues Attribut „__attribute__((assume(EXPR)))“ hinzugefügt, mit dem Sie dem Compiler mitteilen können, dass der Ausdruck wahr ist, und der Compiler diese Tatsache nutzen kann, ohne den Ausdruck auszuwerten.
  • Flag „-fstrict-flex-arrays=[level]“ hinzugefügt, um das Verhalten bei der Verarbeitung eines flexiblen Array-Elements in Strukturen auszuwählen (Flexible Array-Mitglieder, ein Array mit unbestimmter Größe am Ende der Struktur, zum Beispiel „int b[] ").
  • Flag „-Wenum-int-mismatch“ hinzugefügt, um Warnungen auszugeben, wenn eine Nichtübereinstimmung zwischen einem Aufzählungstyp und einem Ganzzahltyp besteht.
  • Das Fortran-Frontend bietet volle Unterstützung für die Finalisierung.
  • Dem Frontend der Go-Sprache wurde Unterstützung für generische Funktionen und Typen (Generika) hinzugefügt und die Kompatibilität mit Paketen für die Go-1.18-Sprache wurde sichergestellt.
  • Das AArch64-Backend unterstützt CPU Ampere-1A (ampere1a), Arm Cortex-A715 (cortex-a715), Arm Cortex-X1C (cortex-x1c), Arm Cortex-X3 (cortex-x3) und Arm Neoverse V2 (neoverse -v2). . Der Option „-march=" wurde Unterstützung für die Argumente „armv9.1-a“, „armv9.2-a“ und „armv9.3-a“ hinzugefügt. Unterstützung für die Prozessorerweiterungen FEAT_LRCPC, FEAT_CSSC und FEAT_LSE2 hinzugefügt.
  • Dem ARM-Architektur-Backend wurde Unterstützung für die CPUs STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) und Arm Cortex-M85 (cortex-m85) hinzugefügt.
  • Dem x86-Backend wurde Unterstützung für die Prozessoren Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids und AMD Zen 4 (znver4) hinzugefügt. Die in Intel-Prozessoren vorgeschlagenen Erweiterungen der Befehlssatzarchitektur AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT und AMX-COMPLEX wurden implementiert. Für C und C++ auf Systemen mit SSE2 wird der Typ __bf16 bereitgestellt.
  • Das Codegenerierungs-Backend für AMD Radeon GPUs (GCN) implementiert die Möglichkeit, AMD Instinct MI200-Beschleuniger zu verwenden, um die OpenMP/OpenACC-Leistung zu verbessern. Verbesserte Vektorisierung mithilfe von SIMD-Anweisungen.
  • Deutlich erweiterte Backend-Funktionen für die LoongArch-Plattform.
  • Unterstützung für CPU T-Heads XuanTie C906 (thead-c906) im RISC-V-Backend hinzugefügt. Unterstützung für Vektorhandler implementiert, die in der RISC-V Vector Extension Intrinsic 0.11-Spezifikation definiert sind. Unterstützung für 30 RISC-V-Spezifikationserweiterungen hinzugefügt.
  • Beim Generieren gemeinsam genutzter Objekte mit der Option „-shared“ wird nach dem Hinzufügen einer Gleitkommaumgebung kein Startcode mehr hinzugefügt, wenn die Optimierungen „-Ofast“, „-ffast-math“ oder „-funsafe-math-optimizations“ aktiviert sind .
  • Die Unterstützung des DWARF-Debugging-Formats ist in fast allen Konfigurationen implementiert.
  • Option „-gz=zstd“ hinzugefügt, um Debug-Informationen mithilfe des Zstandard-Algorithmus zu komprimieren. Die Unterstützung für den veralteten Debug-Informationskomprimierungsmodus „-gz=zlib-gnu“ wurde entfernt.
  • Die anfängliche Unterstützung für OpenMP 5.2 (Open Multi-Processing) wurde hinzugefügt und die Implementierung der OpenMP 5.0- und 5.1-Standards wurde fortgesetzt, wobei APIs und Methoden für die Anwendung paralleler Programmiermethoden auf Multicore- und Hybridsystemen (CPU + GPU / DSP) definiert wurden Gemeinsamer Speicher und Vektorisierungseinheiten (SIMD).
  • Veraltete Unterstützung für das alte STABS-Debug-Informationsspeicherformat (aktiviert mit den Optionen -gstabs und -gxcoff), das in den 1980er Jahren erstellt und im DBX-Debugger verwendet wurde.
  • Veraltete Unterstützung für Solaris 11.3 (Code zur Unterstützung dieser Plattform wird in einer zukünftigen Version entfernt).

Source: opennet.ru

Kommentar hinzufügen