【发布时间】:2012-10-06 01:32:09
【问题描述】:
我很好奇静态类型和惰性函数式语言之间的关系。例如,是否有可能拥有动态的惰性函数式语言?似乎所有的惰性函数式语言都是静态类型的(Haskell、Miranda 等),而所有动态函数式语言都使用严格的评估(Clojure、Scheme 等)。
特别是,Lazy 评估中的Wikipedia article 内容如下:
但是,懒惰的评估,很难与 命令性功能,例如异常处理和输入/输出, 因为操作的顺序变得不确定。懒惰的评价 可能会导致空间泄漏。
静态类型在防止空间泄漏方面起什么作用?
【问题讨论】:
-
这两件事之间没有关系。懒惰是关于
when to evaluate而静态类型是关于给编译器一些关于你的代码的extra information -
@Ankur 这些是离散概念的事实并不意味着在这种情况下它们之间没有关系。提问者在问“惰性”函数式语言的本质是否使静态类型特别有利(反之亦然,也许)。考虑到这两个特征之间可观察到的对应关系,这是一个非常合理的问题。
-
ML 系列语言怎么样,Josh?默认情况下,它们是静态类型和渴望的,惰性只能通过闭包作为选项提供。不过,这不会使您的观点无效;)
-
SASL 是 David Turner 在 Miranda 家族中的第一个语言,它似乎是无类型的(与静态类型相反),令人惊讶的是,它可能是 St Andrews 静态语言。我相信 Nyquist - Roger Dannenberg 的声音合成语言 - 很懒惰,看起来不是很打字。
标签: haskell types functional-programming scheme lazy-evaluation