GCC 8.1 bringt experimentellen C++2a-Support

Die GNU Compiler Collection erweitert in Version 8.1 den Support für C++17 und bietet eine erste Anbindung an den kommenden C++2a-Standard. Außerdem gibt der Compiler aussagekräftigere Fehlermeldungen aus.

 –  34 Kommentare
GCC 8.1

Das Team hinter der GNU Compiler Collection hat turnusmäßig die neue Hauptversion GCC 8.1 veröffentlicht. Seit GCC 5 findet die Entwicklung der jeweils neueren Variante zwar mit einer "0" hinter der Hauptversion statt, das erste Release bekommt jedoch eine "1". Zu den allgemeinen Neuerungen gehören einige Optimierungen für einige Profile sowie für den Link-Prozess. Außerdem dürfen sich vor allem C++-Entwickler über zahlreiche Ergänzungen zum Sprachstandard sowie bei der Fehlersuche freuen.

Zwei neue Compiler-Flags dienen in erster Linie der Sicherheit: -fcf-protection testet, ob die Zieladressen von Kontrollstruktur-Transferbefehlen (Control Flow Transfer Instructions) wie indirekten Funktionsaufrufen oder Sprüngen gültig sind. Derzeit funktioniert der Vorgang nur für GNU/Linux auf x86. Das Flag -fstack-clash-protection dient zum Überprüfen beim Allozieren von Speicherbereichen, um Stack-Overflow-Fehler zu vermeiden.

Nachdem bereits der im Frühling 2017 erschienene GCC 7.1 einen guten Teil der Sprachfeatures von C++17 unterstützte, hat das Team nun vor allem die Anbindung der Standardbibliothek (libstdc++) bezüglich des Sprachstandards erweitert und unter anderem std::filesystem implementiert. Gleichzeitig gibt es einen ersten experimentellen Support für den kommenden Standard C++2a und führt dazu die Flags -std=c++2a sowie -std=gnu++2a ein. Letzteres bezieht die GNU Extensions ein.

Auch dürfen sich C++-Entwickler über einige aussagekräftigere Fehlermeldungen freuen. So erkennt der Compiler, wenn ein Programm ein Makro verwendet, das erst an späterer Stelle definiert wird. Er rät zudem zum Verwenden von enthaltenen Zugriffsfunktionen auf Eigenschaften, wenn der Zugriff auf eine private Variable einen Fehler verursacht.

Der Compiler schlägt den Zugriff auf die private Variable über den öffentlichen Getter vor. (Bild: GNU)

Für C und C++ gibt der Compiler zudem bei nicht definierten Objekten aus den Standardbibliotheken Hilfen, welche #include-Anweisungen benötigt sind, beispielsweise für NULL die Header-Datei <stddef.h>. Die Unterstützung bei der Fehlersuche, die sogenannten Fix-it Hints, bietet darüber hinaus noch weiteren Feinschliff, wie die korrekte Position beim Melden eines fehlenden Semikolons oder die Anzeige der zugehörigen öffnenden Klammer zu einer fehlenden schließenden.

Auch für andere Sprachen gibt es einige nennenswerte Neuerungen. So bietet GCC 8.1 nun eine Implementierung von Googles Programmiersprache Go in Variante 1.10.1 und bietet dazu einen vollständig nebenläufigen Garbage Collector. Fortran-Entwickler finden mit parametrisierten abgeleiteten Typen (Parametrized Derived Types) ein wichtiges Feature von Fortran 2003.

Die komplette Liste der Neuerungen lässt sich den Release Notes entnehmen. GCC lässt sich von einem der zahlreichen GNU-FTP-Mirror-Server jeweils im Unterverzeichnis gcc/gcc-8.1.0/ herunterladen. (rme)