Compile Time Function Evaluation (CTFE)

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.

Weiterführende Quellen

rdmd playground.d