erlang 单次分配的目的是什么?

rvpgvaaj  于 2022-12-08  发布在  Erlang
关注(0)|答案(3)|浏览(197)

我现在正在努力掌握Erlang,这是我研究的第一种函数式编程语言,我注意到在Erlang中,你做的每一个赋值都是一个单独的赋值。显然,不仅在Erlang中,在许多其他函数式编程语言中,赋值都是通过一个单独的赋值来完成的。
我真的很困惑,为什么他们会这样做。单一任务的目的到底是什么?我们能从中得到什么好处?

igsr9ssn

igsr9ssn1#

不变性(你称之为单赋值),简化了很多事情,因为它从你的程序中取出了“时间”变量。
例如,在数学中,如果你说

x = y

你可以在任何地方用y替换x,但在运算编程语言中,你不能保证这个等式成立:每一行代码都有一个“时间”(状态)。这个时间状态也为不需要的side effects敞开了大门,side effects是模块化和并发性的头号敌人。
有关详细信息,请参阅此。

rjzwgtxy

rjzwgtxy2#

由于使用了单赋值,副作用非常小。事实上,在Erlang中编写带有争用条件或任何副作用的代码非常困难。这是因为,编译器很容易告知未使用的变量、未使用的创建项、阴影变量(特别是在funs中)等。
Erlang的另一个优势是Referential Transparency,Erlang中的函数只依赖于传递给它的变量,而不依赖于全局变量,除了MACROS(宏在运行时不能改变,它们是常量)。
最后,如果你看过Erlang Movie,内置在Erlang中的Sophisticated Error Detection Mechanism非常依赖于这样一个事实,即在Erlang中,变量被赋值一次。

xjreopfe

xjreopfe3#

让变量保持它们的值会使代码更容易理解和调试。使用并发进程,你会遇到同样的问题,所以无论如何,有足够的复杂性,而不是让任何变量在任何时候都可能改变它的值。可以把它看作是封装副作用,只允许显式的副作用。

相关问题