Полная лень была несколько раз продемонстрировано в причина пространство утечки.
Почему полная лень от -O
и дальше? Я не убежден в рассуждениях в SPJ Реализация языков функционального программирования. Утверждение состоит в том, что в
f = \y -> y + sqrt 4
sqrt 4
излишне повторяется каждый раз, когда вводится f
, поэтому мы должны плавать за пределами лямбда. Я согласен в малом, но, поскольку мы видели, какие проблемы это преобразование вызывает в целом, я не верю, что это того стоит. Мне кажется, что преимущества этого преобразования можно получить в одностороннем порядке ** только с локальными изменениями кода, а программисты, которые этого хотят, должны реализовать его вручную.
Можете ли вы убедить меня иначе? Действительно ли full-laziness
действительно полезен? Я буду особенно убежден, если вы можете привести примеры, которые для осуществления вручную потребуют многостороннего сотрудничества или нелокальных преобразований.
** в отличие от оптимизаций, таких как встраивание и потоковое слияние, которые для реализации вручную потребуют многостороннего сотрудничества между модулями и изменениями нелокального кода.