Viele Compiler-Neuerungen in GCC 4.9

Das alljährliche Major-Release der GNU Compiler Collection bringt etliche Neuerungen bei der Unterstützung von Programmiersprachen- und Programmierstandards sowie zahlreiche Optimierungen mit.

 –  57 Kommentare
(Bild:  GNU Compiler Collection, Lizenz GNU Free Documentation License )

Rund 13 Monate nach der Veröffentlichung des letzten größeren Releases ist die Version 4.9 der GNU Compiler Collection (GCC) erschienen. Das neue Release enthält zahlreiche funktionale Neuerungen oder Verbesserungen zur Optimierung des kompilierten Codes, aber auch auf Programmiersprachenseite oder bei der Aktualisierung auf neue Programmierstandards hat sich einiges getan.

So wird mit OpenMP 4.0 die im letzten Sommer freigegebene letzte Version des offenen Standards zur Shared-Memory-Programmierung unterstützt. OpenMP 4.0 führte neue Konstrukte für die Nutzung von Beschleunigern und Coprozessoren sowie Direktiven zum Abbruch paralleler Berechnungen ein. Außerdem lassen sich nun eigene Datentypen für die Reduktion spezifizieren.

An der Unterstützung des derzeit aktuellen C++11-Standards haben die GCC-Entwickler ebenfalls gefeilt, so wurde am im Sprachstandard vorgeschriebenen Umgang mit regulären Ausdrücken gearbeitet. Seit der Version 4.8.1 ist die GNU Compiler Collection bei C++11 "feature-complete". Außerdem wurden mit GCC 4.9 erste Bemühungen unternommen, die mit mit C++14 vorgesehenen Neuerungen zu unterstützen. Ebenfalls neu im Boot ist Cilk Plus, eine von Intel eingebrachte C++-Spracherweiterung zur parallelen Daten- und Task-Verarbeitung, mit der GCC nun in Ansätzen umgehen kann.

Der C-Compiler kann nun Sprachkonstrukte von C11 wie atomare Typen, generische Auswahlen und Thread-lokalen Speicher bedienen. Die Unterstützung des ISO-Standards ist anscheinend bis auf einige wenige Ausnahmen weitgehend fertig. Bei der Programmiersprache Ada nutzt GCC nun den neuesten Sprachstandard Ada 2012, GCC 4.8 war noch auf Ada 2005 ausgerichtet. Fortran 2003 lässt sich jetzt mit Finalization verwenden, das schon andere Compiler zur Verfügung stellen. Aufgewertet wurde Googles Programmiersprache Go, deren Version 1.2.1 die GCC-Entwickler implementiert haben.

Die Funktion Address Sanitizer zum Aufspüren von Speicherfehlern war bei GCC 4.8 allein x86- und x86-64-Systemen vorbehalten, nun ist sie auch auf ARM-Geräten einsetzbar. Ganz neu ist hingegen Undefined Behavior Sanitizer (UBSan). Mit der Funktion lässt sich undefiniertes Verhalten zur Laufzeit nach den C- und C++-Standards erkennen.

Überarbeitet haben die Entwickler die Link Time Optimizations (LTOs). Hier kommt es aufgrund der Verbesserungen zu einer Reduzierung der Speicherbelegung und der beim Kompilieren aufgewendeten Zeit. Auf Intels x86-64- und IA-32-Systemen gibt es außerdem schon Support für die neuen AVX-512-Instruktionen

Weitere Neuerungen entnimmt man am besten der von den Entwicklern zusammengetragenen Liste der Änderungen. Downloads gibt es auf den FTP-Servern des GNU-Projekts.

Siehe dazu auch:

(ane)