string reverse(string str) pure nothrow
{
string reverse_impl(string temp, string str) pure nothrow
{
if (str.length == 0)
{
return temp;
}
else
{
return reverse_impl(str[0] ~ temp, str[1..$]);
}
}
return reverse_impl("", str);
}
Насколько я знаю, этот код должен быть подвержен оптимизации хвостового вызова, но я не могу сказать, работает ли это DMD. Какой из компиляторов D поддерживает оптимизацию хвостового вызова и будет ли он выполнять эту функцию?Какие компиляторы D будут выполнять оптимизацию хвостового вызова для этой функции?
В некоторых случаях GDC определенно делает оптимизацию хвостового вызова, но в этом конкретном случае версия GDC, которую я использовал, по-прежнему генерирует прямые рекурсивные вызовы. –
Я использовал GDC 5.2.0. –
LDC 1.1.0 сделал правильную вещь с этим примером. –