Evaluación de funciones en tiempo de compilación (CTFE)

La evaluación de funciones en tiempo de compilación (CTFE, Compile Time Function Evaluation, en inglés) es un mecanismo que permite al compilador ejecutar funciones en tiempo de compilación. No existe un conjunto especial de características del lenguaje D necesarias para usar esta característica, simplemente cuando una función depende exclusivamente de valores conocidos en tiempo de compilación, el compilador de D puede decidir interpretarla durante la compilación.

// El resultado se calcula en tiempo de compilación.
// Si se mira el código máquina generado, este no
// contiene ninguna llamada a función.
static val = sqrt(50);

Palabras reservadas como static, immutable o enum indican al compilador que use CTFE cuando sea posible. Lo bueno de esta técnica es que no se necesita reescribir las funciones para ser usada, además de que este código se puede compartir sin ningún problema:

int n = doSomeRuntimeStuff();
// La misma función que antes, sólo que esta vez se
// llama de la forma clásica: en tiempo de ejecución.
auto val = sqrt(n);

Un prominente ejemplo en D de esta técnica es la librería std.regex. Esta librería proporciona el tipo ctRegex, que usa mixins de cadenas de caracteres (visto en la sección anterior) y CTFE para generar autómatas que analicen expresiones regulares altamente optimizados. La misma base de código se usa para la versión de regex que permite compilar expresiones regulares que sólo están disponibles en tiempo de ejecución.

auto ctr = ctRegex!(`^.*/([^/]+)/?$`);
auto tr = regex(`^.*/([^/]+)/?$`);
// 'ctr' y 'tr' se pueden intercambiar,
// pero 'ctr' es más rápida.

No todas las características del lenguaje están disponibles para CTFE, pero el soporte de esta característica por parte del lenguaje se incrementa con cada nueva versión del compilador.

En profundidad

rdmd playground.d