C++0x: Ausblick auf den neuen C++-Standard

Standards  –  Kommentare

Seit knapp zehn Jahren gibt es einen offiziellen Standard für die objektorientierte Sprache C++. Während der eigentliche Sprachkern stabil und etabliert ist, machen einige fortgeschrittene Features Spracherweiterungen notwendig. C++0x, eine überarbeitete und ergänzte Version des Standards, soll das in absehbarer Zeit realisieren.

Der Nachfolger des aktuellen C++-Standards ISO/IEC 14882:2003 (der selbst ein technisches Update des 1998 verabschiedeten Standards ist) trägt die Bezeichnung C++0x (manchmal auch C++200x). Dahinter verbirgt sich eine inoffizielle Abkürzung, die das geplante Datum für seine Verabschiedung andeutet. Wenn auch mitunter gemunkelt wird, das x könnte für einen HEX-Wert stehen, so strebt das Standardkomitee doch eine Release vor 2010 an. Damit das gelingt, muss der finale Draft bis Anfang 2008 bei der ISO vorliegen. Um den angestrebten Termin zu halten, arbeitet das Standardkomitee mittlerweile fieberhaft an der neuen Version und hat für 2007 sogar zusätzliche Meetings angesetzt. Der Artikel wirft einen Blick auf die momentan vorgeschlagenen Änderungen.

C++ gilt als „Multi-Paradigmen-Programmiersprache“. In seinem Buch „The Design and Evolution of C++“ [1] erläutert Stroustroup, dass sie als Sprache für die systemnahe Programmierung gedacht ist, die verschiedene Stile unterstützt wie den Einsatz

  • als besseres C,
  • für die Datenabstraktion,
  • die Objektorientierung und
  • die generische Programmierung.

Speziell der letzte Punkt hat mit der Einführung der Templates und deren intensiver Nutzung in den letzten Jahren stark zugenommen – unter anderem mit der Template-Metaprogrammierung.

Die Ursprünge dieser Entwicklung sind sicherlich in der C++ Standard Template Library (STL) zu finden, wenngleich bei deren Festschreibung noch nicht absehbar war, wie weit man die Nutzung von Templates treiben kann. Die STL wurde als Sammlung generischer Datenstrukturen wie Listen oder Bäume sowie entsprechender Algorithmen (beispielsweise Sortieren) entworfen und ist mittlerweile Teil des Sprachstandards. C++ gehört nach wie vor zu den am häufigsten eingesetzten Programmiersprachen. Dies gilt speziell für die systemnahe Programmierung etwa bei Gerätetreibern oder Spiele-Engines. Besonders im Embedded-Bereich spielt C++ eine große Rolle und wird dies trotz der Konkurrenz durch „Realtime“-Java beziehungsweise C# und dem .Net-CompactFramework sicherlich weiterhin tun. Grund genug für das C++-Komitee, die Sprache weiterhin zu pflegen und einen neuen Standard in Angriff zu nehmen.

C++0x hat drei Hauptziele: C++ soll erstens das Mittel der Wahl für die systemnahe Programmierung bleiben. Die Sprache soll zweitens das Erstellen leistungfähiger Bibliotheken ermöglichen und drittens leichter zu vermitteln und zu lernen sein.

Während der erste Punkt sich für die Zukunft von C++ als entscheidend erweisen dürfte, ist der letzte gerade für Programmieranfänger relevant, da Sprachen wie Java und C# einfacher zugänglich sind. Sonderfälle und ständige Ausnahmen im Regelwerk von C++ sowie die Rückwärtskompatibilität zu C sorgen für Verwirrung, und zwar nicht nur bei Neulingen, sondern auch bei Experten. Weiterhin will man – soweit möglich – den Sprachkern von Inkonsistenzen und Fehlern befreien. Konkret bedeutet das:

  • Es sollen keine größeren neuen Sprach-Features eingeführt werden,
  • Peinlichkeiten sollten entfernt werden (etwa das > > bei geschachtelten Templates),
  • das 0-Overhead-Prinzip („do not pay when you don’t use´) muss erhalten bleiben,
  • Inkompatibilitäten zu C++98/03 gilt es soweit wie möglich zu vermeiden, und
  • typische Stolperfallen sollen entfernt oder zumindest minimiert werden.

Sofern sich eine bestimmte Funktion innerhalb einer Bibliothek implementieren lässt, ist dies gegenüber einer Spracherweiterung normalerweise vorzuziehen.

Zusätzlich zum aktuellen C++98/03 soll der neue Standard folgende drei Hauptbestandteile integrieren:

  • Funktionen des Technical Report 1 (TR1). Dazu zählen weitere
  • Container-Klassen, der Bereich Template-Metaprogrammierung (TMP),
  • Teile der Boost-Bibliotheken (siehe Onlinerequellen), das Mathematikmodul <cmath> und Ergänzungen zum zweiten ANSI-C-Standard C99.
  • Neue, benötigte Sprach-Features (beispielsweise Concepts, Variadic Templates, Rvalue References, Auto, Garbage Collection).
  • Behebung von Sprachdefekten wie dem Delegating von Konstruktoraufrufen.

Eine gute Übersicht darüber, was voraussichtlich Teil von C++0x sein wird, gibt das Onlinedokument „State of C++ Evolution“, wobei sich die Liste bis Herbst 2007 noch ändern kann. Inzwischen ist das Featureset für C++0x aber stabil.