静态类型和惰性函数语言之间有什么关系?

Jos*_*gts 8 scheme haskell types functional-programming lazy-evaluation

我很好奇静态类型和懒惰函数语言之间的关系.例如,是否可以使用动态惰性函数语言?好像所有懒惰的函数式语言都是静态类型的(Haskell,Miranda等),并且所有动态函数语言都使用严格的评估(Clojure,Scheme等).

特别是关于懒惰评估的维基百科文章内容如下:

但是,通过惰性求值,很难与异常处理和输入/输出等命令性功能相结合,因为操作顺序变得不确定.懒惰的评估可能会引入空间泄漏.

静态类型在防止空间泄漏方面起什么作用?

Pau*_*fer 14

我认为静态类型根本不起作用.例如,考虑无类型的懒惰语言Lazy Racket.我没有听说任何迹象表明它以Haskell(例如)没有的方式泄漏空间.

另一方面,副作用一个问题,因为人类发现严格评估的评估顺序是(相对)自然的,并且需要的呼叫在精神上更难以预测.

  • Haskell通过不具有任何副作用原语来防止无意的副作用(除了名称以`unsafe`开头的东西,但它们不计算).键入允许效果但限制它们的系统,但Haskell的方法更简单. (2认同)

Don*_*art 6

静态类型在防止空间泄漏方面起什么作用?

类型可用于跟踪对象的生命周期,静态地确保没有泄漏.

一个例子是区域类型和其他效果类型.

  • 您能引用任何能够详细解释这一点的参考文献吗?否则,这真的只是一个声明(无论如何是真的),不会给提问者很多帮助. (3认同)