Здравствуйте, hardcase, Вы писали:
H>А в каких это случаях он не может оптимизировать хвостовой вызов?
Иногда программист считает, что рекурсия хвостовая, а она на самом деле такой не является. Для этих случаев было бы неплохо дать возможность программисту помечать функцию tailrec, и если она в какой-то момент станет не хвосторекурсивной, выдавать ошибку
Здравствуйте, Anton V. Kolotaev, Вы писали:
AVK>Здравствуйте, hardcase, Вы писали:
H>>А в каких это случаях он не может оптимизировать хвостовой вызов?
AVK>Иногда программист считает, что рекурсия хвостовая, а она на самом деле такой не является. Для этих случаев было бы неплохо дать возможность программисту помечать функцию tailrec, и если она в какой-то момент станет не хвосторекурсивной, выдавать ошибку
Здравствуйте, Anton V. Kolotaev, Вы писали:
AVK>Иногда программист считает, что рекурсия хвостовая, а она на самом деле такой не является. Для этих случаев было бы неплохо дать возможность программисту помечать функцию tailrec, и если она в какой-то момент станет не хвосторекурсивной, выдавать ошибку
А что делать, если рекурсия перестанет быть хвостовой, а компилятор всё равно её оптимизирует, как это делает GCC?
Здравствуйте, Don Reba, Вы писали:
DR>А что делать, если рекурсия перестанет быть хвостовой, а компилятор всё равно её оптимизирует, как это делает GCC?
Мне кажется, автор именно это имел в виду. Т.е. проверку что все рекурсивные вызовы функции сводятся к формированию цикла.
Здравствуйте, Ka3a4oK, Вы писали:
KK>Было бы клево, если бы компилятор сигнализировал о том, что ему не удалось развернуть хвостовую рекрусию.
Сам недавно хотел создать такой топик. Написать хвостово-рекурсивный алгоритм — задача непростая. А если ошибешся, никакого нормального способа об этом узнать нету. А хвостовая рекурсия дает вполне определенные гарантии, которые не хотелось бы потерять при изменении уже написанного кода. Тем более, компилятору ничего не стоит выдать ошибку или ворнинг в соответствующем случае.
Кстати, в Скале такая фича есть (я очень удивился, когда узнал). Интересно, почему ее не было в Окамле.
Здравствуйте, catbert, Вы писали:
C>Здравствуйте, hardcase, Вы писали:
H>>К сожалению на лябды их вешать нельзя.
C>А есть способ создавать рекурсивные лямбды?