繁体   English   中英

Erlang 中的进程/消息和 Smalltalk 中的对象/消息有什么区别?

[英]What is the difference between processes/messages in Erlang and objects/messages in Smalltalk?

我试图了解Smalltalk中的对象/消息和Erlang中的进程/消息之间的区别。 阅读了有关该主题的以下帖子

据我了解,在 Smalltalk 中,一切都是object ,并且一切都具有相同的“对象/消息”抽象——即使数字1也是 object ,只能通过消息传递来实现。 1是 Erlang/Elixir 中的一个进程吗? Erlang 中的所有内容都是对消息/程序范例的响应吗? 可以发短信到Erlang中的号码吗?

非常感谢。

Erlang 中的进程和 Smalltalk 中的 Objects 确实是一回事。

乍一看,这并不奇怪:Erlang 是一个Actor Model语言。 Actor Model 由 Carl Hewitt 发明,他基于 Smalltalk 的消息驱动评估 model 的消息驱动评估 model。 (实际上,Actor 和 Objects 是一回事;它们只是在某些细节上有所不同。)反过来,Alan Kay 在设计 Smalltalk 时受到了 Carl Hewitt 的 PLANNER 的影响。

因此,Actor 和 Objects 之间有着密切的关系,因此 Erlang 的 Processes 和 Smalltalk 的 Objects 如此相似也就不足为奇了。

除了一件事:Erlang 的设计者不知道演员 Model ,.! 他们是后来才知道的,尤其是在 1990 年代后期,乔·阿姆斯特朗在 Seif Haridi(关于编程范式的权威书籍的合著者)的指导下撰写了他的博士论文。

Joe Armstrong 曾写过一篇文章,强烈反对 OO( Why OO Sucks ),但后来他意识到 Erlang 实际上非常面向对象时改变了主意。 事实上,在这次采访 Joe Armstrong 和 Ralph Johnson 时,他甚至声称 Erlang 是唯一的面向对象语言。

这是进化生物学家所说的趋同进化的一个有趣案例,即两个不相关的物种在相似的外部压力下进化为相似的。

Erlang和Smalltalk之间还是有很多关系的,不过:

Erlang started out as a concurrency extension to Prolog (and even when Erlang became its own separate language, the first implementations were written in Prolog) and is still to this day heavily rooted in Prolog. Prolog 深受 Carl Hewitt 的 PLANNER 的影响。

Smalltalk 也深受后来的 ARPANet(甚至后来的 Internet)的影响。 Erlang 专为联网系统而设计。

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

Erlang有多个“层”:

  • 函数式 Erlang :一种最典型的动态类型函数式语言,具有从 Prolog 继承的一些“奇怪”,例如统一。
  • 并发 Erlang :功能 Erlang + 进程和消息。
  • 分布式 Erlang :并发 Erlang + 远程进程。
  • 容错 Erlang :分布式 Erlang + 在 OTP 库中编码的某些设计模式,例如主管树和gen_server

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

有趣的是,Erlang 所承受的“进化压力”,换句话说,Erlang 的设计者试图解决的问题(可靠性、复制、冗余……)与导致细胞进化的压力相同。 Alan Kay 辅修微生物学,并明确地将 OO 建模为生物细胞。 这是 Erlang 和 Smalltalk 之间的另一个相似之处。

我在我的另一个答案中写了一些关于此的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM