Почему компиляторы не могут автоматически оптимизировать регулярную рекурсию? - PullRequest
0 голосов
/ 20 марта 2019

Практически в каждом учебнике по функциональному программированию большой раздел посвящен тому, как научить вас преобразовывать алгоритмы в хвосто-рекурсивный формат, поскольку его можно оптимизировать до цикла.

Это хорошо, но этоЯ удивился, почему компиляторы не могут автоматически преобразовывать алгоритм с использованием «обычной» рекурсии, чтобы использовать отдельный объект стека (размещенный в куче), а затем преобразовывать алгоритм в нечто итеративное.

Я не совсем понимаю, как работают компиляторы схемы CHICKEN или Haskell (которые, как я слышал, могут быть невосприимчивы к переполнению стека), но, возможно, они делают что-то подобное?Если так, то почему это не может быть сделано на большинстве языков?

Я не говорю об этом плохим инженерам-компиляторам, я просто искренне понятия не имею, как это работает, но хотел бы изучить.

1 Ответ

0 голосов
/ 01 мая 2019

Во-первых, существует разница между не может и в настоящее время не делает

Поскольку ваше предложение не является тем, что технически можно назвать сложным, то есть не завершенным или не завершенным в вашей жизни, кажется, онина самом деле может

подразумеваемый вопрос о том, почему они этого не делают, - это спекуляция, но, вероятно, основанная на том, сколько ресурсов потребуется, чтобы гарантировать те же результаты с оптимизацией или без нее

я не пропускаюдни большой неопределенности уровня оптимизации, вызывающего ошибку, поэтому я с радостью подожду этого до тех пор, пока она не достигнет идеального значения

, насколько я знаю, в стандарте нет ничего, исключающего эту оптимизацию

...