GNU Compiler Collection: GCC 6.1 setzt auf C++14 und unterstützt OpenMP 4.5
Das jährliche große Release der GNU Compiler Collection bringt einige Neuerungen für die Parallelprogrammierung mit OpenMP und HSA. Außerdem bietet sie hilfreiche Fehlermeldungen und Warnungen.
- Rainald Menge-Sonnentag
Die GNU Compiler Collection erreicht ihren im Frühjahr üblichen großen Versionssprung und kommt als GCC 6.1 heraus. Das C++-Frontend setzt jetzt standardmäßig auf C++14 statt wie bisher C++98. Wer auf Letzteres angewiesen ist, kann den Standard manuell über die Option -std=gnu++98 setzen. Wer die dazwischenliegende C++11-Spezifikation benötigt, aktiviert sie analog über den Switch -std=gnu++11. Das GCC-Team hat eine Seite mit Hinweisen zu den neuen Konventionen und dadurch notwendigen Änderungen veröffentlicht. GCC bietet zudem mit Version 6 erstmals Support für C++17, das sich noch in Entwicklung befindet.
Parallel mit OpenMP und HSA
C- beziehungsweise C++-Programmierer finden in der neuen Version vollständige Unterstützung für den Standard zur Shared-Memory-Programmierung OpenMP 4.5, der im vergangenen November veröffentlicht wurde. Im Januar hatte das Team zudem den HSA-Branch (Heterogeneous System Architecture) in den Kern von GCC übernommen. Der Compiler erzeugt nun HSAIL (HSA Intermediate Language) durch die Option --enable-offload-targets=hsa. GCC/HSA ist ein gemeinsames Projekt von AMD und SUSE, das auf GCCs OpenMP-Bibliothek aufsetzt.
Der Compiler hilft bei einigen Fehlern mit aufschlussreichen Meldungen. Sogenannte "fix-it hints" weisen beispielsweise auf fehlerhafte Derefenzierung (zeiger.inhalt statt zeiger->inhalt) oder Tippfehler bei Feldnamen hin, wie folgendes Beispiel aus den Release Notes zeigt:
spellcheck-fields.cc:52:13: error: \
'struct s' has no member named 'colour'; did you mean 'color'?
return ptr->colour;
^~~~~~
Warnung vor Flüchtigkeitsfehlern
Hilfreich ist auch die per -Wmisleading-indentation zu aktivierende Warnung vor irreführender Einrückung, wenn beispielsweise nach einer if-Klausel keine geschweifte Klammer folgt, aber anschließend mehr als eine Befehlszeile eingerückt ist:
if (a>b)
c=d;
e=f; // diese Zeile ist falsch eingerückt und wirkt konditional
Zudem hat das Team die Optimizer und die Implementierung der OpenACC-2.0a-Spezifikation verbessert. Hinzu kommen Anpassungen für individuelle Betriebssysteme und Hardwarearchitketuren. Die volle Liste der Neuerungen und Änderungen finden sich in den Release Notes. GCC 6.1 steht auf zahlreichen FTP-Servern zum Herunterladen bereit, die auf der GNU Mirror List aufgeführt sind. (rme)