GCC 15.1 macht den Sprung zu C23 und fügt C++-Verbesserungen, Optimierungen und mehr hinzu.

gcc

Nach einem Jahr intensiver Entwicklung die Veröffentlichung der neuen Version von «GCC 15.1» wurde angekündigt, die als erste stabile Version innerhalb des neuen 15.x-Zweigs dieser beliebten Open-Source-Compiler-Suite positioniert ist.

Mit dieser Version wird nicht nur die neue GCC 15-Reihe offiziell gestartet, sondern auch der Beginn der Vorbereitungen für die Entwicklung von GCC 16 markiert, da der Zweig 16.0 parallel geforkt wurde und die Grundlage für die nächste Hauptversion, GCC 16.1, legen wird.

GCC 15.1 Neue Hauptfunktionen

Eine der bemerkenswertesten Änderungen in dieser neuen Version ist, dass GCC 15.1 übernimmt den C23-Standard als Standard zum Kompilieren von C-Code, mit der Option -std=gnu23. Dieses Update ersetzt den vorherigen, standardmäßig verwendeten Standard C17 (-std=gnu17) und führt eine Reihe neuer Funktionen des neuen Standards ein. Darunter ist die Konstante nullptr, der Typ _BitInt(n) und die Schlüsselwörter bool, true und false, was zu Konflikten mit vorhandenen Bezeichnern im Legacy-Code führen könnte.

Eine weitere neue Funktion von GCC 15.1 ist die #embed-Direktive zum Einbetten binärer Daten, und Attribute wie „unsequenziert“ und „reproduzierbar“, die eine bessere Kontrolle über die Ausführungsreihenfolge und die Ermittlung konsistenter Ergebnisse ermöglichen. Darüber hinaus wurden Elemente des zukünftigen C2Y-Standards implementiert, wie etwa die Deklaration von Variablen innerhalb von if-Bedingungen, Wertebereiche in Case-Anweisungen, imaginäre Suffixe i und j sowie Unterstützung für die Operatoren ++ und —, die auf komplexe Zahlen angewendet werden.

Verbesserungen in C++ und dem zukünftigen C++26

Im Falle der Sprache C++ ist die neue Version von GCC 15.1 implementiert Funktionen, die für den C++26-Standard diskutiert werden, da neue Funktionen wie der „Friend“-Operator, die Verwendung von constexpr mit Varianten des neuen Operators und Verbesserungen in der Syntax für strukturierte Links und Attribute wie Musttail für garantierte Endrekursion eingeführt werden.

Auch die C++23-Unterstützung wird erweitert mit neuen Regeln für die Verwendung des Exports, Verbesserungen bei der Handhabung temporärer Objekte und einer experimentellen Implementierung der Module std und std.compat in libstdc++. Darüber hinaus wird die Sicherheit für die Union-Initialisierung erhöht und die Codekompilierung dank eines effizienteren Template-Hashing-Systems verbessert.

Neue Warnungen und Verbesserungen in der statischen Analyse

Das System Die statische Analyse erhielt ein visuelles Redesign die Probleme durch Symbole hervorhebt, Tipps zur Migration auf C23 und eine neue libgdiagnostics-Bibliothek Dies ermöglicht die Wiederverwendung der Diagnoselogik in anderen Projekten. Außerdem wird Unterstützung für die Generierung von Berichten im SARIF-Format eingeführt, was die Integration mit modernen Codeanalysetools erleichtert.

Bei Bestehende Warnungen werden zu neuen hinzugefügt, als -Wanalyzer-undefiniertes Verhalten-ptrdiff um Subtraktionen zwischen nicht verwandten Zeigern zu erkennen, –Wtrailing-whitespace und -Wleading-whitespace um unnötige Leerzeichen anzuzeigen, und –Wheader-Wächter um Fehler beim Schutz vor Header-Einschlüssen zu erkennen.

Optimierungen und Support

Zu den bemerkenswerten Optimierungen gehören Ein inkrementeller Kompilierungsmodus für LTO ist enthalten (Link-Time Optimization), entwickelt, um Neukompilierungen bei minimalen Änderungen zu beschleunigen. Auch Die Schleifenvektorisierung wurde verbessert, selbst in Fällen, in denen die Größe der Arrays zur Kompilierzeit nicht bekannt ist, und erhöht die Geschwindigkeit beim Kompilieren sehr großer Dateien.

Auf der Supportseite wurden ARMv64-Erweiterungen zu AArch8 hinzugefügt, Unterstützung für neue CPUs wie Apple M3, Cortex-X925 und NVIDIA Grace und erweitert die MinGW-Plattform. Die Codegenerierung für AMD Radeon GPUs wird gestärkt durch Experimentelle Unterstützung für die neuen Serien GFX9, GFX10.3 und GFX11. Für die x86-Architektur ist die Unterstützung für AVX10.2 und neue AMX-Anweisungen aktiviert und die Unterstützung für Xeon Phi Knights wurde eingestellt.

Zusätzlich GCC 15.1 führt einen Compiler für COBOL ein (gcobol), mit Unterstützung für x86-64- und AArch64-Architekturen und einer aktualisierten Implementierung der D-Sprache (Version 2.111.0). Unterstützung für vorzeichenlose Ganzzahlen in Fortran wurde hinzugefügt und die Einführung von OpenMP 5.0 auf 6.0 wurde vorangetrieben, einschließlich Verbesserungen der Interoperabilität und einheitlicher Speichernutzung auf GPUs.