函数式编程中安全,纯净和引用透明之间的关系是什么?

时间:2018-06-23 18:12:38

标签: haskell functional-programming purely-functional

  1. 纯净/不纯净:当我们谈论Haskell与lisp系列之间的区别时出现。
  2. 安全/不安全:当我们命名诸如unsafePerformIO,unsafeCoerce之类的函数时出现。
  3. 参照透明性/参照透明性:当我们强调纯函数式编程的好处时出现。

这两个词之间的区别非常微妙,我发现有一些帖子是单独谈论它们的,但是我仍然希望它们之间能有一个清晰的比较,而我在这里还找不到这样的帖子。 / p>

1 个答案:

答案 0 :(得分:4)

我一直很喜欢Amr Sabry在1998年发表的论文,该论文以应有的严谨性探索了一个类似的问题:https://www.cs.indiana.edu/~sabry/papers/purelyFunctional.ps

报价示例:

  

如果语言(i)包括所有简单键入的语言,则它是纯功能性的   lambda微积分术语,以及(ii)按名称调用,按需求调用和   按值调用实现是等效的模散度和   错误。

尽管这个问题可以产生很多基于“观点”的答案(我要小心避免!),但通过阅读Amr的论文可以使您正确思考如何思考这个问题;不管您最终是否同意他。