Erlang真的是演员模型语言吗?


18

我在读这篇文章:

http://www.doc.ic.ac.uk/~nd/surprise_97/journal/vol2/pjm2/

它提到:

在演员模型中,甚至一个整数也被表示为演员

维基百科确认:

演员模型采用了一切都是演员的理念。

Erlang有许多数据类型,据我所知,这些类型不是参与者。

难道不是说Erlang不是一种参与者模型语言,就像有人说Java不是一种功能语言,就是因为它缺少某些功能性编程功能吗?

PS:通过扩展,这意味着Akka绝对不是演员模型,因为除了来自宿主语言的非演员数据类型之外,它甚至还允许继承的演员通过宿主语言工具扩展其行为。

Answers:


39

尽管Actor模型早于Erlang,但Erlang的设计者仅在设计Erlang之后才了解Actor模型,因此可能会有一些差异。

但是,它们遵循并行的发展路径:演员模型是卡尔·休伊特(Carl Hewitt)基于Smalltalk的消息传递语义创建的。反过来,艾伦·凯(Alan Kay)将Smalltalk的消息传递语义建立在目标驱动的PLANNER评估的基础上,该评估是由…卡尔·休伊特(Carl Hewitt)设计的。

PLANNER是Prolog的前身。Erlang最初并不是一种语言,它最初是在Prolog中用于容错分布式编程的库,后来演变成Prolog的方言,直到它成为自己的语言,至今仍受Prolog的影响(此外,原始的Erlang解释器是用Prolog编写的)。

因此,Erlang中的流程,OO中的对象和Actor模型中的Actor之间的相似性绝非偶然。

Erlang是一种具有多层的语言,每一层都是较低层的超集。最小的层是Functional Erlang。这是一种标准功能语言,具有从Prolog继承的一些附加功能,例如统一而不是绑定/相等。如果在其中添加ProcessesMessages,则会得到Concurrent Erlang。进行远程处理后,您将获得Distributed Erlang。现在,从OTP添加一些库和设计模式,您将获得容错的Erlang。

流程是参与者。(它们也是对象。)流程的内部是功能性的,而不是基于Actor的。使用OTP的工具和模式构建的大型容错Erlang系统的结构通常是非常面向对象的。

因此,这取决于您要查看的规模。

在典型的大型Erlang系统中,您将拥有一个面向对象的体系结构,并使用函数式编程实现了消息传递参与者。OTP所谓的a server与一个对象密切相关,servers由进程(是参与者)组成,进程内部使用功能。

总的来说,我不相信任何纯粹的演员语言都没有离开过研究。哎呀,我什至不知道卡尔·休伊特(Carl Hewitt)的原始演员语言PLASMA 是否曾被实施过。


4
Erlang也是由有问题的人设计的,当您处于这个位置时,通常会在实用性的高度上牺牲概念上的纯正性。
Blrfl 2015年

有趣的是,他们试图解决的问题(可靠性,复制性,冗余性……)与自然界在进化细胞时试图解决的问题相同。艾伦·凯(Alan Kay)擅长微生物学,并在生物细胞上明确建立了面向对象模型。另一个平行。
约尔格W¯¯米塔格

1
PLASMA在MacLisp中实现。它是一种发展迅速的研究语言。
Jerry101

1
真的很喜欢这个答案。谢谢@JörgWMittag!
Felixyz
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.