Одним из действительно полезных и практичных способов использования функции времени компиляции является генерация кода во время компиляции, возможно из файлов конфигурации или, возможно, из сценариев.
Вот простой пример обработки файла во время компиляции.
main.d
string make_ints(string s)
{
string ret = "";
foreach (varname; split(s))
ret ~= "int " ~ varname ~ "; ";
return ret;
}
void main()
{
mixin(make_ints(import("script")));
foo = 1;
bar = 2;
xyz = 3;
}
сценарий
foo bar xyz
Во время компиляции файл «script» будет прочитан, разбит на пробелы, а затем make_ints вернет int foo; int bar; int xyz;
непосредственно в код D, готовый к использованию этих переменных.
Хотя это бесполезный пример, вы можете легко увидеть, как это можно использовать для чтения значений из файла конфигурации (возможно, значений для размера кэша или чего-то в этом роде). Игры могут использовать это для генерации необработанного D-кода из сценариев, что будет очень полезно для производительности (обычно игры прибегают к использованию интерпретируемого кода для сценариев и страдают от производительности).
Вы также можете использовать это для автоматической настройки производительности. Скажем, у вас есть некоторая постоянная X, которую можно настроить, чтобы по-разному влиять на производительность, но вы не знаете, какое значение X даст вам наилучшую производительность. Вы можете поместить X в файл, прочитать его во время компиляции для использования, попробовать некоторые другие значения во время выполнения и поместить лучшее значение обратно в файл. Таким образом, вы постепенно повышаете производительность, не делая ничего вручную.