Temple Metaprogrammierung


Die Template Metaprogrammierung ist eine Möglichkeit, in C++ während der Übersetzung bereits Berechnungen durchzuführen. Damit können zusätzliche Checks eingebaut werden. Besonders genutzt wird dies, um effiziente Algorithmen zu bauen.
Im Jahr 2000 wurde hierzu ein spezieller Workshop abgehalten.

Begonnen hat dies beim C++ Standardisierungstreffen 1994 in SanDiego. Hier meine persönliche Erinnerung:

Wir diskutierten über die Möglichkeiten, Template Argumente aus einem Template zu bestimmen. Dabei kam die Frage hoch, ob das Inverse einer Funktion bestimmt werden könnte. Ob also aus  " I+1 == 5 " geschlossen werden könnte, daß " I == 4 " ist. Dies wurde verneint, aber die Frage inspirierte mich zu der Idee, während der Übersetzung Primzahlen zu berechnen. Die erste Version bastelte ich am Montag zusammen, aber sie war grundlegend falsch. Bjarne Stroustrup meinte, so etwas würde prinzipiell nicht funktionieren.
Dies stachelte meinen Eifer an, und so hatte ich Mittwoch nachmittag das Gerüst des Programmes fertig. Am Mittwoch abend war noch ein Arbeitstreffen angesagt, wo ich etwas Luft hatte. Dort traf ich Tom Pennello, und wir setzen uns zusammen. Er hatte seinen Notebook dabei und wir tippten mein Programm kurz ein. Nach einigen Basteleien lief das Programm. Wir machten einen Lauf und druckten Programm und Fehlermeldung aus. Anschliessend kam Tom auf die Idee, doch eine kompliziertere Funktion zu nehmen. Wir wählten die Ackermann Funktion. Nach wenigen Stunden lief auch dies und berechnete den Wert der Ackermann-Funktion während der Übersetzung.
Am Donnerstag zeigte ich den Ausdruck Bjarne. Er war äußerst verblüfft. Ich fertigte dann Kopien für alle Teilnehmer an und ließ dieses kuriose Programm offiziell verteilen. Ich hielt das ganze für einen Scherz.

Ein paar Wochen später entwickelte ich einen Beweis, daß der Template-Mechanismus Turing-vollständig ist. Da dieser Beweis jedoch recht trocken war, habe ich ihn einfach zu den Akten gelegt. Die Notizen habe ich immer noch. Bei Gelegenheit werde ich diese mal eintippen und hier zur Verfügung stellen.

Später griff Todd Veldhuizen die Idee auf und veröffentlichte einen Artikel im C++ Report. Dieser erschien im Mai 1995. Er begriff die Möglichkeiten, die hinter der Idee stecken und setzte diese in konkrete Metaprogramme um, die etwas konstruktives machen.
Dieser Artikel war die Basis, auf der die Template-Metaprogrammierung aufgebaut wurde. Ich gab zwar den Anstoss, erkannte aber nicht die Reichweite der Idee.



Erwin Unruh, 1. 1. 2002