Programmieren: 35 Jahre GCC – Version 12.1 schneidet alte STABS-Zöpfe ab

Zum 35. Geburtstag räumt das neue GCC-Release auf: Ein älteres Debugging-Format landet beim Alteisen und die Interoperabilität mit Fortran ist erneut ausgebaut.

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

35 Jahre ist es her, seit die GNU Compiler Collection (GCC) in Version 1.0 erschienen ist, damals noch unter der Bezeichnung GNU C Compiler. Eine Tradition hält sich seither robust: Seit 1987 beschert das Frühjahr der Community alljährlich eine neue große GCC-Ausgabe, und Version 12.1 ist als erstes stabiles Release der Serie 12.x nun pünktlich erschienen.

Das Release verwirft das STABS-Debugging-Format als veraltet (deprecated), mit dem nächsten Release wird STABS komplett entfallen und als Ersatz führt GCC 12.1 mit dem Compact Type Format (CTF) nun ein neues Debugging-Format ein. Informationen dazu sind in einem GitHub-Repository von Oracle greifbar, das binutils und gpb zur Linux-Toolchain enthält. Die GCC-Entwickler haben die Kompatibilität mit den C- und C++-Frontends weiter ausgebaut, da beides sich im Laufe des letzten Jahres ebenfalls weiterentwickelt hat. Hierbei war insbesondere die Unterstützung für Funktionen der kommenden C-2x- und C++23-Standards zentral.

Zudem hatte das Entwicklungsteam für GCC 12.1 im Blick, dass die C++-Standardbibliothek die Unterstützung für die experimentellen Teile von C++20 und C++23 überarbeitet hat – auch diese Neuerungen finden im Release laut der Ankündigung via Mailingliste Berücksichtigung.

Das neue Release unterstützt den ShadowCallStack Sanitizer, der sich mit der Kommandozeilenoption -fsanitize=shadow-call-stack aktivieren lässt. Der Sanitizer funktioniert zurzeit nur auf Zielen der AArch64-Architektur und benötigt eine Umgebung, in der der gesamte Code mit -ffixed-r18 kompiliert ist. Der Sanitizer ist primär auf den Linux-Kernel ausgelegt, der laut Release Notes auch sein ursprünglicher Erstnutzer ist.

Insgesamt bringt das Release zwar keine großen Neuerungen und setzt eher kleine Glanzlichter, es berücksichtigt aber, dass das Frontend der imperativen, prozeduralen und seit 2003 auch objektorientierten Programmiersprache Fortran nun gemäß technischer Spezifikation (TS) die Interoperabilität mit C vollständig unterstützt. Fortran ist für numerische Berechnungen optimiert und kommt insbesondere in Technik und Forschung zum Einsatz. Version 12.1 der GNU Compilersammlung soll Clangs __builtin_shufflevector-Erweiterung und die gemeinsame Nutzung von generischem Vektorcode erleichtern.

Beginnend mit GCC 12.x ist eine optimierte Vektorisierung standardmäßig aktiv. Laut Release Notes entspricht dabei die Optimierungsebene -o2 nun der bisherigen Ebene -O2 -ftree-vectorize -fvect-cost-model=very-cheap. Zudem sollen zusätzliche Beschränkungen für die Erweiterung der Codegröße greifen, was sich laut Herausgebern wohl insgesamt günstig auf die Compiler-Performance auswirkt.

Weitere Neuerungen betreffen unter anderem sprachspezifische Änderungen für C, C++, Fortran, aber auch Ada, eine Sprache insbesondere für sicherheitskritische Anwendungen unter anderem in der Luft- und Raumfahrt. Die gesamten Änderungen lassen sich im Detail in den Change Notes bei GNU nachlesen, und eine Releasemeldung hat über die GCC-Mailingliste als Kurzfassung die Runde gemacht. Interessierte können die neue GCC-Version bei Sourceware direkt herunterladen. Anfang Mai 2022 war im gleichen Releasezyklus bereits der GNU Debugger 12.1 mit erweiterter Anbindung für LoongArch und OpenRISC erschienen.

(sih)