Ich habe eben diesem
Interview auf Channel 9 mit den C++-Sprachhütern Alexandrescu, Meyers, Sutter gelauscht. Der interessanteste Punkt darin ist die Anerkennung der breiten Nichtakzeptanz von Template-Metaprogrammierung. Dass Templates abseits einfachen generischen Codes weder einfach zu schreiben, noch einfach zu verwenden sind, ist bekannt. Herb Sutter geht so weit, zu postulieren, dass nicht-triviale Template-Metaprogrammierung im Produktiveinsatz fast immer auf fehlende Sprach-Features hindeutet. Der Punkt ist: Die Masse meidet Metaprogrammierung mit Templates, und das zurecht. Dass C++ Mittel bereit stellt, mit denen sich ein nicht unbedeutender Teil fehlender Features mit einigem Aufwand in der Sprache selbst implementieren lässt, ist großartig für deren Weiterentwicklung, weil es die Evaluation und konsistente Formung zukünftiger Features erlaubt. Schlussendlich sind aber sowohl die zusätzlichen Abhängigkeiten von komplexen Template-Bibliotheken als auch die Instabilität und Undurchsichtigkeit solcher Konstrukte im Fehlerfall für den Produktiveinsatz ein Problem und ein Risiko. Herb Sutter sieht deshalb das Ziel nicht darin, Metaprogrammierung allgemein zu vereinfachen, sondern vielmehr die wichtigen Anwendungsfälle in Form von stabileren Sprachfeatures für alle zugänglich zu machen.
Ich habe hier im Laufe der letzten eineinhalb Jahre viel über ärgerliche Einschränkungen, unnötige Komplexität und die bisweilen haarsträubende Redundanz geschrieben, die der C++-Template-Metaprogrammierung innewohnen. Ich bin nicht ganz glücklich mit Sutters Aussicht, dass sich daran womöglich nicht mehr allzu viel ändern wird, aber ich sehe, dass selbst hier in diesem Forum, mit vielen, auch an der Metaebene interessierten Nutzern, das Interesse an dieser Art der Programmierung vergleichsweise gering ausfällt. Auch hierzu enthält das Interview einen interessanten Punkt: Obwohl Template-Metaprogrammierung Teil des C++-Sprachstandards ist, existiert sie mehr oder weniger als Parallelsprache neben der Laufzeitsprache, dem Präprozessor und neuerdings auch noch einem
constexpr-Teil. Letzterer wird mit etwas Glück einen großen Brocken aus der Ecke der Templates in eine weitaus lesbarere und leistungsstärkere Form bringen (Floating-Point-Arithmetik zur Compile-Zeit?!), womit für Templates wohl zwei große Anwendungsfelder übrig bleiben: Typisierung (einfach) und Code-Generierung (weiterhin schwierig). Das ist insofern erfreulich, als dass Templates als Typkonstruktoren nicht nur zu ihrer ursprünglichen Bestimmung zurückfinden, sondern als solche auch am leichtesten zu verstehen und anzuwenden sind, und somit langfristig eventuell auch im allgemeinen Werkzeugkasten der programmierenden Masse anzutreffen sein werden. Mit
static_if (C++17?) und Concepts (C++77?) wandern außerdem weitere hässliche Dinge wie
enable_if aus der schmutzigen Ecke der Metaprogrammierung in die Tonne, um durch stabilere und damit zugänglichere Sprach-Features ersetzt zu werden.
Oh und es gibt eine eigene Working Group für Module in C++ unter der Leitung von Doug Gregor.