Erlang中的进程/消息与Smalltak中的对象/消息之间的差异

问题描述 投票:0回答:1

我试图了解Smalltak中的对象/消息与Erlang中的进程/消息之间的区别。

https://www.quora.com/What-does-Alan-Kay-think-about-Joe-Armstrong-claiming-that-Erlang-might-be-the-only-object-oriented-language-and-also-his-thesis-supervisor-s-claim-that-Erlang-is-extremely-object-oriented

据我了解,在Smalltalk中,所有事物都是对象,并且所有事物都具有相同的“对象/消息”抽象-甚至数字1也是只能通过消息传递才能到达的对象。1是Erlang / Elixir中的进程吗? Erlang中的所有内容是否都响应消息/程序范例?您可以向Erlang中的号码发送消息吗?非常感谢。

非常感谢。

oop erlang elixir smalltalk
1个回答
0
投票

Erlang中的进程和Smalltalk中的对象确实是同一件事。

乍看之下,这并不令人惊讶:Erlang是一种Actor Model语言。演员模型由卡尔·休伊特(Carl Hewitt)发明,他将消息驱动的评估模型基于Smalltalk的消息驱动的评估模型。 (实际上,Actor和Object是同一件事;它们只是在某些细节上有所不同。)Alan Kay在设计Smalltalk时受到了Carl Hewitt的PLANNER的影响。

因此,Actor和Object之间存在密切的关系,因此,Erlang的Process和Smalltalk的Objects如此相似也就不足为奇了。

[除了一件事:Erlang的设计师不知道演员模型 !!!他们只是后来才知道这一点,特别是当乔·阿姆斯特朗(Joe Armstrong)于1990年代后期在Seif Haridi(关于编程范例的权威著作)的合著者中撰写博士学位论文时。

[Joe Armstrong写了一篇文章,他强烈反对OO(Why OO Sucks),但是后来他意识到Erlang实际上是非常面向对象的,便改变了主意。实际上,他甚至甚至宣称Erlang是this interview with Joe Armstrong and Ralph Johnson中的only面向对象语言。

这是进化生物学家称之为convergent evolution的有趣情况,即两个无关的物种在响应相似的外部压力时演变为相似的物种。

不过,Erlang和Smalltalk之间仍然存在很多关系:

Erlang最初是Prolog的并发扩展(甚至当Erlang成为自己的独立语言时,第一个实现都是用Prolog编写的),直到今天仍然根植于Prolog。 Prolog在很大程度上受到了Carl Hewitt的PLANNER的影响。

Smalltalk还受到后来成为ARPANet(甚至后来的Internet)的严重影响; Erlang是为网络系统设计的。

但是,Erlang和Smalltalk之间的重要区别之一是,并非所有事物都是一个过程。 1是数字,不是过程。您无法向号码发送消息。

Erlang有多个“层”:

  • Functional Erlang:一种最典型的,动态类型化的功能语言,具有从Prolog继承的一些“奇特特征”,例如统一。
  • 并发Erlang
  • :功能性Erlang +进程和消息。
  • Distributed Erlang
  • :并发Erlang +远程进程。
  • Fault-tolerant Erlang
  • :分布式Erlang +在OTP库中编纂的某些设计模式,例如主管树和gen_server

    用Erlang / OTP编写的容错系统通常看起来像我们可能会识别为“面向对象”的东西。但是这些对象的内部通常会比面向对象的样式实现更多功能。

有趣的是,Erlang遭受的“进化压力”,换句话说,Erlang的设计人员试图解决的问题(可靠性,复制性,冗余性……)与导致细胞进化的压力相同。艾伦·凯(Alan Kay)擅长微生物学,并在生物细胞上明确建立了面向对象模型。这是Erlang和Smalltalk之间的另一个相似之处。

我在another answer of mine中写了些关于此的内容。

© www.soinside.com 2019 - 2024. All rights reserved.