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.

In Pocket speichern vorlesen Druckansicht 130 Kommentare lesen
GCC 6.1 setzt auf C++14 und unterstützt OpenMP 4.5
Lesezeit: 2 Min.
Von
  • 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.

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;
^~~~~~

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)