erlang 中对不可变/持久数据结构的需求是什么

t0i*_*0ap 2 erlang functional-programming immutability

每个 Erlang 进程都维护自己的私有地址空间。所有通信都是通过复制而不共享进行的(大二进制文件除外)。如果每个进程一次处理一条消息,而没有对其对象的并发访问,我不明白为什么我们需要不可变/持久的数据结构

Ale*_*nov 5

Erlang 最初是在 Prolog 中实现的,它也没有真正使用可变数据结构(尽管某些方言使用)。所以一切都在没有他们的情况下开始。这使得运行时实现更简单、更快(尤其是垃圾收集)。

因此,添加可变数据结构需要付出很大的努力,可能会引入错误,而根据定义,Erlang 程序员至少愿意在没有它们的情况下生活。

许多人实际上认为它们的缺席是一个积极的好处:减少对对象身份的关注,不需要防御性复制,因为您不知道其他一些代码是否会修改您传递的数据(或者可能稍后更改以修改)它)等

这种缺失确实意味着 Erlang 在某些领域(例如高性能科学计算)非常不可用,至少作为主要语言是这样。但同样,这意味着这些领域中没有人会首先使用 Erlang,因此没有特别的动机以让现有用户不高兴为代价来使其可用。

我记得很久以前看到乔·阿姆斯特朗(Joe Armstrong)发布的邮件列表(我现在快速搜索找不到)说他最初计划在需要时添加可变变量......但他从来没有完全这样做过做到了,并且性能对于他使用 Erlang 所做的一切来说已经足够好了。