© Ron Dale/Shutterstock.com
Die Features der neuen C++-Version

C Plus Plus 20


Die Pflege von „in Ehren ergrauten“ Systemen ist seit jeher eine durchaus haarige Aufgabe. Die Arbeit an der neuen Ausgabe des C++-Standards erwies sich als durchaus kritisch. Bis zuletzt war nicht ganz klar, welche Erweiterungen wirklich in den neuen Sprachstandard kommen. Mittlerweile hat sich der Staub gelegt. Auch wenn ein Gutteil der Funktionen noch nicht in allen Compilern implementiert ist, ist nun ein guter Zeitpunkt, um einen Blick auf die Möglichkeiten und Grenzen der neuen Version von C++ zu werfen.

Ein alter Kalauer besagt, dass ein Industriestandard nur eine Einladung für Ingenieure ist, möglichst viele divergierende, den Standard nach Buchstaben aber erfüllende Systeme zu realisieren. Auch wenn die wilden Zeiten des „Embrace and Extend“ in der Welt der Informatik mittlerweile hinter uns liegen, gilt trotzdem, dass Compilerentwickler im Allgemeinen nicht die Schnellsten sind. Wer zum Zeitpunkt der Drucklegung einen Überblick über die Unterstützung der verschiedenen C++-20-Spezifikationen bzw. -Features in Compilern sucht, findet unter [1] eine detaillierte und gut gepflegte Tabelle.

Tenor der dortigen Ergebnisse ist, dass GCC in der aktuellen Version 10 mit Abstand am meisten von C++ 20 unterstützt. Leider ist die Entwicklung noch in einem so frühen Stadium, dass es keine fertig zu installierenden Pakete gibt. Das gilt explizit auch für auf Stack Overflow immer wieder zu findende Installationsanweisungen, die nach dem folgenden Schema ein neues PPA einpflegen:

tamhan@tamhan-VirtualBox:~$ sudo add-apt-repository ppa:ubuntu-toolchain-r/test tamhan@tamhan-VirtualBox:~$ sudo apt-get install gcc-snapshot

Compilerupdates sind im Allgemeinen eine unproduktive Sache. Ein sehr umfangreicher Test des amerikanischen Dienstes Phoronix ergab, dass die Entwicklung von GCC 5 bis inklusive 10 weniger als 5 Prozent Performancegewinn brachte [2]. Ein weiterer Grund, warum man Compilerexperimente nicht mit der produktiv genutzten Linux-Distribution durchführen sollte, ist, dass der Compiler in modernen Unix-Betriebssystemen für die eigentliche Funktion des Systems wichtig ist. Der Autor begegnete diesem Problem durch eine in VirtualBox laufende VM. Öffnen Sie diese im ersten Schritt und laden Sie den aktuellen Quellcode der GCC-Entwicklerschaft herunter:

tamhan@tamhan-VirtualBox:~$ svn co svn://gcc.gnu.org/svn/gcc/trunkgcc-trunk . . . Ausgecheckt, Revision 280157.

Die Kompilation von GCC sollte außerhalb des eigentlichen Quellcodeverzeichnisses erfolgen, weshalb wir im ersten Schritt ein Arbeitsverzeichnis erzeugen und in diesem danach ein Skript aufrufen. Es kümmert sich darum, benötigte Bibliotheken für uns herunterzuladen:

tamhan@tamhan-VirtualBox:~$ cd gcc-trunk tamhan@tamhan-VirtualBox:~/gcc-trunk$ ./contrib/download_prerequisites

Wer mit einer frischen Version von Ubuntu 18.04 arbeitet, muss an dieser Stelle noch die folgenden zusätzlichen Komponenten herunterladen:

apt-get install flex g++

Das Herunterladen von GCC bzw. seiner C++-Variante ist insofern erforderlich, da sich GCC, wie übrigens auch viele andere Compiler, selbst kompilieren kann. Im nächsten Schritt geht es darum, den GCC-Quellcode mit den zur Kompilation notwendigen Parametern auszustatten:

tamhan@tamhan-VirtualBox:~/gcc-trunk-build$ ../gcc-trunk/configure --prefix=/usr/gcc-trunk --enable-languages=c,c++,fortran --disable-libquadmath --disable-libquadmath-support --disable-werror --disable-bootstrap --enable-gold

Wie bei vielen anderen GNU-Projekten kann man auch bei der Kompilation von GCC ein Präfix anliefern. Dieses wird danach vor die Dateinamen der generierten Kompilate platziert, was die Koexistenz erleichtert. Danach kommt, was kommen muss:

tamhan@tamhan-VirtualBox:~/gcc-trunk-build$ make -j 8 tamhan@tamhan-VirtualBox:~/gcc-trunk-build$ sudo make install

Die Kompilation von GCC ist ob des nicht unerheblichen Quellcodes eine rechenintensive Aufgabe, die in einer virtuellen Maschine Geduld verlangt. Geben Sie dem virtuellen Rechner deshalb so viel Prozessorleistung wie möglich und achten Sie darauf, in -J ausreichend Threads anzuweisen. Nach getaner Arbeit folgt der bekannte Aufruf von make install, um Teile der Kompilate in das Betriebssystem einzubauen.

Interessanterweise führt die Eingabe von gcc auch nach der Abarbeitung von make install zum Aufruf der veralteten, von Ubuntu selbst bereitgestellten Version. Unsere gewünschte Variante findet sich folgendermaßen – achten Sie darauf, den Slash nicht zu vergessen:

tamhan@tamhan-VirtualBox:/usr/gcc-trunk/bin$ ./gcc -v . . . gcc-Version 10.0.0 20200111 (experimental) (GCC)

Python lässt grüßen

In Ankündigungen von C++ 20 hört man immer wieder von den „big five“ nun „big four“. Dabei handelt es sich um eine Gruppe von vier Funktionen, die für C++ 20 charakteristisch sind. Allgemein hat Python C++ im Lauf der letzten Jahre den Rang abgelaufen – in vielen Bereichen wie der künstlichen Intelligenz spie...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang