【发布时间】:2010-11-03 00:31:13
【问题描述】:
我正在寻找默认情况下使用严格评估而不是惰性评估的 Haskell 编译器。我只会使用 OCaml,但 Haskell 的语法比 OCaml 的好多了(而且 Haskell 是纯粹的,并且有很酷的特性,例如类型类)。
我真的不想在我的程序中不断地使用!s 和$!s。带有开关或预处理器以放入严格性注释的编译器会非常好。如果在某些地方也有一种使用惰性求值的方法也会很有帮助,以防万一我想要一个无限列表之类的东西(我可能永远不会)。
请不要试图说服我懒惰的评估更好,我真的需要性能。 IIRC,Simon Peyton Jones 甚至说惰性评估并不是真正必要的,它主要是为了防止他们使语言变得不纯。
【问题讨论】:
-
如果存在这样的预处理器(我不知道),这可能意味着您必须重新编译您使用的每个库,因为它们都是惰性的(并且被编写为在懒惰的环境)。如果突然使用严格的评估,我猜大多数 Haskell 库都会崩溃。
-
@Tom Lokhorst:当然有些东西会坏掉,但我希望大多数东西在未经修改的情况下都能正常工作。
-
你有一个例子说明惰性求值导致性能很差吗?
-
我当然愿意。与我的机器中只有 6 GB 的内存和空间泄漏有关。如果您愿意签署 NDA,我会非常乐意在下次发生时让您帮助我。
-
我怀疑我能否提供帮助,无论是否保密。我希望从你的例子中学到一些东西,但是一个完全存在的陈述并不是很有启发性。 :-)
标签: compiler-construction haskell lazy-evaluation