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.
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.
Mehr fĂĽr C++-Entwickler
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.
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.
Jenseits von C und C++
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)