gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 03:25:13 26 4
gpt4 key购买 nike

我试图理解 Smalltalk 中的对象/消息和 Erlang 中的进程/消息之间的区别。我read the following post on the topic .

据我所知,在 Smalltalk 中,一切都是对象,一切都具有相同的“对象/消息”抽象——甚至是数字 1是一个只能通过消息传递才能到达的对象。
1 Erlang/Elixir 中的进程? Erlang 中的一切都是对消息/程序范式的回应吗?你能用 Erlang 给一个号码发送消息吗?

非常感谢。

最佳答案

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

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

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

除了一件事:Erlang 的设计者不知道 Actor 模型!!!他们后来才知道这件事,尤其是在 1990 年代后期,乔·阿姆斯特朗 (Joe Armstrong) 在 Seif Haridi(编程范式权威著作的合著者)的指导下撰写了他的博士论文时。

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

这是一个有趣的案例,进化生物学家称之为convergent evolution ,即两个不相关的物种在应对相似的外部压力时进化为相似的。

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

Erlang 一开始是 Prolog 的并发扩展(甚至当 Erlang 成为它自己的独立语言时,第一个实现是用 Prolog 编写的)并且直到今天仍然深深 Root 于 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 之间的另一个相似之处。

    我在 another answer of mine 中写了一点关于这个.

    关于oop - Erlang 中的进程/消息和 Smalltalk 中的对象/消息有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58578030/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com