CTFE (dt.: Funktionsauswertung zur Kompilierzeit) ist ein Mechanismus, der dem Compiler die Ausführung von Funktionen zur Kompilierzeit ermöglicht. Für den Gebrauch dieses Features sind es keine speziellen D-Befehle nötig - immer, wenn eine Funktion nur auf zur Kompilierzeit bekannten Werten beruht, kann der D-Compiler die Entscheidung treffen, die Funktion schon während der Kompilierung auszuwerten.
// Ergebnis wird zur Kompilierzeit
// berechnet. Der erzeugte Machinencode
// enthält keinen Funktionsaufruf!
static val = sqrt(50);
Schlüsselwörter wie static
, immutable
oder enum
weisen den Compiler an, CTFE zu nutzen, wann immer
dies möglich ist. Großartig daran ist, dass die Funktion
nicht neu geschrieben werden muss:
int n = berechneZurLaufzeit();
// Die gleiche Funktion wie oben, aber
// dieses Mal klassisch zur Laufzeit
// ausgeführt.
auto val = sqrt(n);
Ein herausragendes Beispiel in D ist die
std.regex-Bibliothek.
Sie bietet einen ctRegex
-Typ (ct: compile time), der
String Mixins und CTFE nutzt, um während der Kompilierung
hochoptimierte Reguläre Ausdrücke zu generieren.
Die Laufzeitvariante regex
nutzt die gleiche Codebasis.
auto ctr = ctRegex!(`^.*/([^/]+)/?$`);
auto tr = regex(`^.*/([^/]+)/?$`);
// ctr und tr liefern das gleiche Ergebnis,
// nur dass ctr schneller ist!
Nicht alle Sprachfeatures stehen für CTFE zur Verfügung. Allerdings wird die Menge derunterstützten Features ständig erweitert.