尽管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继承的一些附加功能,例如统一而不是绑定/相等。如果在其中添加Processes和Messages,则会得到Concurrent Erlang。进行远程处理后,您将获得Distributed Erlang。现在,从OTP添加一些库和设计模式,您将获得容错的Erlang。
流程是参与者。(它们也是对象。)流程的内部是功能性的,而不是基于Actor的。使用OTP的工具和模式构建的大型容错Erlang系统的结构通常是非常面向对象的。
因此,这取决于您要查看的规模。
在典型的大型Erlang系统中,您将拥有一个面向对象的体系结构,并使用函数式编程实现了消息传递参与者。OTP所谓的a server
与一个对象密切相关,server
s由进程(是参与者)组成,进程内部使用功能。
总的来说,我不相信任何纯粹的演员语言都没有离开过研究。哎呀,我什至不知道卡尔·休伊特(Carl Hewitt)的原始演员语言PLASMA 是否曾被实施过。