Login


 
Newsletter
Werbung

Mi, 24. Februar 2016, 13:47

Software::Entwicklung

Was bringt GCC 6?

Im April oder gar schon im März soll GCC 6 erscheinen. Jeff Law hat jetzt die Neuerungen dieser Version erläutert.

gnu.org

GCC, die GNU Compiler Collection, erscheint jährlich in einer neuen Hauptversion. GCC 6 ist nun in der Phase kurz vor der Veröffentlichung, in der nur noch kritische Regressionen korrigiert werden. Das bedeutet, dass GCC 6 bereits im März offiziell veröffentlicht werden könnte. Jeff Law von Red Hat hat jetzt angesichts der näher rückenden Freigabe die Neuerungen im Red Hat-Entwicklerblog zusammengefasst.

Ein bedeutender Punkt wird die Erweiterung der Warnungen sein. GCC 6 warnt vor zusätzlichen fragwürdigen Konstrukten, die erfahrungsgemäß oft Programmierfehler darstellen. So gibt der Compiler nun eine Warnung aus, wenn die Einrückung des Codes im Widerspruch zum tatsächlichen Programmfluss steht. Auch ein Vergleich eines Objekts mit sich selbst und ein Vergleich, der immer dasselbe Ergebnis liefert, werden jetzt beanstandet. Wenn ein Vergleich in einer if-else-if-Kette ein zweites Mal erscheint, ist das nun ebenfalls eine Warnung wert, ebenso wie das undefinierte Verhalten von Shift-Operationen mit negativen Zahlen und Überläufen von Links-Shifts. Eine eingehendere Code-Analyse produziert zudem in vielen Fällen, in denen potentiell NULL-Zeiger dereferenziert werden oder unzulässige NULL-Werte übergeben werden, eine Warnung.

An neuen Funktionen bringt GCC 6 vor allem Unterstützung für OpenMP 4.5 in C und C++, während Fortran vorerst nur OpenMP 4.0 unterstützt. Unter x86/x86_64 gibt es nun die Möglichkeit, Variablen relativ zu einem bestimmten Segment zu deklarieren. Damit wird gezielt ein bestimmtes Segment-Register für den Variablenzugriff genutzt. Bisher mussten solche speziellen Zugriffe in Assembler codiert werden, unter anderem im Linux-Kernel.

Ein neues internes Konzept sind »Rich Locations« im Code. Damit können Fehler- und Warnmeldungen auf einen Bereich des Codes statt auf einen bestimmten Punkt verweisen, was in einigen Fällen zu klareren Meldungen führt. Außerdem kann der Compiler Hinweise zur Korrektur geben.

Eine weitere Neuerung ist das target_clones-Attribut. Damit kann ein Programmierer angeben, dass eine Funktion mehrfach für verschiedene Befehlssätze compiliert werden soll. Zur Laufzeit wählt das Programm dann die Variante, die zum ausführenden Prozessor passt. In der Regel ist das die Variante, die auf diesem Prozessor am schnellsten läuft.

Das Pragma scalar_storage_order ermöglicht es, bei Feldern einer Struktur anzugeben, in welchem Endian-Format sie gespeichert sind. Beim Zugriff werden automatisch die passenden Konvertierungsfunktionen aufgerufen, wo nötig.

Ferner gab es auch Verbesserungen beim Ausführen von Code auf spezialisierten Prozessoren. In GCC 5 war schon das Verteilen von Funktionen auf Intel MIC über OpenMP und auf NVidia-GPUs mittels OpenACC möglich. In GCC 6 kommt neben allgemeinen Verbesserungen auch die Möglichkeit der Nutzung von HSA hinzu, einer Spezifikation, die die Kombination von CPUs und Beschleunigern in einem System standardisiert.

GCC 6 macht die Spezifikation C++14 statt C++98 zum Standard und hat »C++ Concepts« gelernt. Ferner beherrscht er bereits weite Teile des kommenden C++17, wobei einige Funktionalitäten neu und experimentell hinzukamen. Nicht zuletzt wurde auch in GCC 6 der erzeugte Code weiter optimiert. Noch unvollständige Angaben dazu finden sich im Änderungslog.

Werbung
Kommentare (Insgesamt: 20 || Alle anzeigen || Kommentieren )
Re[2]: Überflüssig... (blablabla233, Sa, 27. Februar 2016)
Re: Überflüssig... (Unser Herr Killekille, Fr, 26. Februar 2016)
Re[3]: Überflüssig... (ich weiser, Fr, 26. Februar 2016)
Re: Überflüssig... (PsycoMike, Do, 25. Februar 2016)
Re[4]: Überflüssig... (PsycoMike, Do, 25. Februar 2016)
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung