Есть ли компилятор или препроцессор Haskell, который использует строгую оценку? - PullRequest
19 голосов
/ 15 июня 2009

Я ищу компилятор Haskell, который использует строгую оценку по умолчанию вместо ленивой оценки. Я бы просто использовал OCaml, но синтаксис Haskell намного лучше , чем синтаксис OCaml (а Haskell чист и имеет классные функции, такие как классы типов).

Я бы предпочел не постоянно ставить ! с и $! с по всей моей программе. Компилятор с переключателем или препроцессором для добавления аннотаций строгости был бы действительно хорош. Было бы также полезно, если бы в некоторых местах был способ использовать ленивое вычисление, на всякий случай, если бы я хотел что-то вроде бесконечного списка (я, вероятно, никогда не буду).

Пожалуйста, не пытайтесь убедить меня, что ленивая оценка лучше, мне действительно нужна производительность. IIRC, Саймон Пейтон Джонс даже сказал, что ленивая оценка на самом деле не нужна, она была в основном для того, чтобы помешать им сделать язык нечистым.

Ответы [ 11 ]

0 голосов
/ 18 июня 2011

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

...