单转让的目的(The Purpose of Single Assignment)

2019-07-30 03:47发布

我目前正试图掌握二郎。 它是第一个功能编程语言,我看看,我注意到,在二郎,每次你做任务是分配一次。 而且很显然,不只是在二郎山,但在许多其他函数式编程语言,作业都是通过单一分配完成。

我真搞不清楚为什么他们把它这样。 究竟是单任务的目的是什么? 我们可以从它那里得到什么好处?

Answer 1:

不变性(你叫什么单赋值),简化了很多东西,因为它需要从你的程序中“时间”变量。

例如,在数学,如果你说

  x = y

您可以替换xy ,无处不在。 在操作的编程语言,你不能保证这个等式成立:存在与每一行代码相关的“时间”(状态)。 这一次,状态也敞开了大门不希望的副作用,这是我们的敌人数量模块化和并行之一。

欲了解更多信息,请参阅本: http://mitpress.mit.edu/sicp/full-text/book/book-ZH-20.html#%_sec_3.1.1



Answer 2:

因为单赋值 ,副作用是微乎其微的。 逸岸,它与比赛条件或任何副作用二郎这么难写代码。 这是因为,该编译器easilly告诉未使用的变量,它不使用创建的术语,阴影变量(特别是内部funs )等

是二郎在此得到的另一个优点是引用透明 。 在二郎一个函数将只取决于传递给它,而不是全局变量的变量,除了MACROS (和宏不能在运行时修改,它们是常数)。

最后,如果你看了二郎神的电影中, Sophisticated Error Detection Mechanism ,其内置到二郎取决于Erlang中,变量一旦赋予其实这么多。



Answer 3:

有变量保持它们的值使得它更容易理解和调试代码。 随着并发进程,你得到了同样的问题,无论如何,所以有足够的并发症反正无需任何刚潜在变化随时改变它的值。 把它看成是由明确的时候,只允许它们封装的副作用。



文章来源: The Purpose of Single Assignment