Programmieren: GCC 11.1 unterstützt C++17 und Linux Kernel Concurrency Sanitizer

Das neue GCC-Release fasst den nächsten C-Standard C2X in den Blick, unterstützt aktuelle Prozessoren und experimentell auch Intel Advanced Matrix Extensions.

In Pocket speichern vorlesen Druckansicht 11 Kommentare lesen
Lesezeit: 4 Min.
Von
  • Silke Hahn
Inhaltsverzeichnis

Seit 1987 beschert das Frühjahr Entwicklerinnen und Entwicklern alljährlich eine neue große Ausgabe der GNU Compiler Collection (GCC), Version 11.1 ist als erstes stabiles Release der Serie 11.x nun planmäßig erschienen. Wesentlich ist dabei der Support für zahlreiche Intel-, AMD- und ARM-Prozessoren, die vor kurzem erschienen sind beziehungsweise demnächst erscheinen werden.

GCC 11 wartet mit Neuerungen im Bereich der ThreadSanitizer auf und soll jetzt alternative Laufzeitumgebungen besser unterstützen, neuerdings bietet die Compiler Collection auch Unterstützung für den Linux Kernel Concurrency Sanitizer (kurz: KCSAN). Auch bei weiteren Sanitizern gibt es Änderungen, so führt das Release einen hardwaregestützten AddressSanitizer ein (zunächst nur für die ARM64-Architektur). Damit sollen sich Probleme der Adressierung in ähnlicher Form beheben lassen, wie Entwickler es von herkömmlichen AddressSanitizern gewohnt sind. Die zusätzliche Hardware-Unterstützung soll jedoch dafür sorgen, dass die Runtime dabei weniger RAM benötigt. Diese Neuerung gilt noch nicht als produktionsreif und soll wohl hauptsächlich dem Einsatz im Linux Kernel zugute kommen.

Perspektivisch soll die GNU Compiler Collection Intel Advanced Matrix Extensions (AMX) unterstützen, die Arbeiten für die Einbindung hat das GCC-Team mit der vorliegenden Compilerversion bereits aufgenommen. Eine Neuerung hat auch im Bereich des Debugging stattgefunden, so schwenkt das aktuelle Release für das Debuggen der meisten Targets und Switches um auf das Datenformat DWARF 5 und hält als voreingestellten Sprachstandard die Konfiguration -std=gnu++17 bereit. Weitere C++20-Features sowohl auf der Compilerseite als auch im Bereich der Library erhalten nun Support. Standardmäßig unterstützt GCC 11 C++17 und auch bereits einige frühe Funktionalitäten von C++23.

Bei der vorigen Version war noch C++14 die Standardeinstellung. Wer die durch den Wechsel eingetretenen Änderungen am Matching der Template-Parameter nicht gebrauchen kann, muss die Defaultwerte nicht unbedingt auf C++14 zurücksetzen: Das neue Template Matching lässt sich auch separat abschalten durch die Eingabe des Befehls -fno-new-ttp-matching. Als veraltet gilt nun die Konfigurationsmöglichkeit --enable-cheaders=c_std, die die Standard-Library von C++ (libstdc++) betrifft. Diese Option soll mit einem künftigen Release entfallen.

Weitere Änderungen betreffen beispielsweise sprachspezifische Details für C und C++. So sind neue Attribute, Warnhinweise und Erweiterungen für die C-Sprachfamilie hinzugetreten, mit denen sich zum Beispiel der Stack schützen lässt. Hervorzuheben wäre zuletzt noch die kommende Revision des C-Standards durch C2X, wie die informelle Bezeichnung für den nächsten ISO-C-Standard als Arbeitstitel lautet: Einige Features des nächsten C-Standards haben es offenbar bereits in den GCC geschafft und lassen sich mit den Befehlen -std=c2x und -std=gnu2x aktivieren. Manche dieser Features lassen sich laut Ankündigung wie Erweiterungen nutzen, wenn der Compiler zum Kompilieren älterer Sprachversionen zum Einsatz kommt.

Eine Reihe von Features, die frühere GCC-Versionen als Erweiterungen unterstützt hatte und die nun in den C-Standard Eingang gefunden haben, sind im C2X-Modus nun standardmäßig aktiv. Das betrifft insbesondere die Makros BOOL_MAX und BOOL_WIDTH, die bei C2X in den <limits.h> enthalten sind, das Standard-Attribut [[nodiscard]] ist unterstützt und Funktionsdefinitionen müssen offenbar keine Namen für nicht verwendete Funktionsparameter mehr vergeben.

Diese und alle weiteren Änderungen lassen sich in der Releasemeldung bei GNU nachlesen. Interessierte können die GNU Compiler Collection auch im Releasebereich bei Sourceware direkt herunterladen.

(sih)