CTFEはコンパイラに関数をコンパイル時に実行することを可能にさせる機構です。 この機能を使うのに必要なD言語の特殊なセットはありません - 関数がコンパイル時に わかる値のみに依存するときはいつでもDコンパイラは コンパイル中にそれを解釈する可能性があります。
// 結果はコンパイル時に計算されます。
// マシンコードをチェックしてください、
// 関数呼び出しは含まれないことでしょう!
static val = sqrt(50);
static
、immutable
、またはenum
のようなキーワードは出来る限り
CTFEを使うようコンパイラに命令します。このテクニックの素晴らしいところは、
関数はそれを使うために書き換えることを必要とせず、
同じコードは完璧に共有されるところです:
int n = doSomeRuntimeStuff();
// 上と同じ関数ですがこの時は
// 古典的に実行時に呼ばれます。
auto val = sqrt(n);
Dにおける顕著な例はstd.regex
ライブラリです。それは文字列MixinとCTFEをとても最適化された正規表現オートマトンを
コンパイル時に生成するために使うctRegex
型を提供します。同じコードベースは実行時のみ
利用できる正規表現をコンパイルすることを可能にする実行時バージョンのregex
に再利用されます。
auto ctr = ctRegex!(`^.*/([^/]+)/?$`);
auto tr = regex(`^.*/([^/]+)/?$`);
// ctrとtrは互換的に使うことができますが
// ctrのほうが速いでしょう!
CTFEではすべての言語機能は使えませんが、サポートされる機能セットは コンパイラのリリースとともに増えています。