【问题标题】:What is the difference between processes/messages in Erlang and objects/messages in Smalltalk?Erlang 中的进程/消息和 Smalltalk 中的对象/消息有什么区别?
【发布时间】:2020-02-22 22:59:21
【问题描述】:

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

据我了解,在 Smalltalk 中,一切都是对象,并且一切都具有相同的“对象/消息”抽象——即使是数字 1 也是只能达到的对象与消息传递。 1 是 Erlang/Elixir 中的一个进程吗? Erlang 中的一切都是对消息/程序范式的响应吗?你可以向 Erlang 中的号码发送消息吗?

非常感谢。

【问题讨论】:

  • 整数 1 不是一个进程 - 所以你不能给它发送消息。您可以将整数的状态包装在循环过程中并发送该过程消息 - 例如增加或减少其值的指令。但话又说回来,它不再具有价值 1。向下滚动到此处的 Elixir 示例dantswain.herokuapp.com/blog/2015/01/06/…
  • 感谢您的回答!

标签: oop erlang elixir smalltalk message-passing


【解决方案1】:

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

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

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

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

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

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

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

Erlang 最初是作为 Prolog 的并发扩展(即使 Erlang 成为自己的独立语言,第一个实现也是用 Prolog 编写的),直到今天仍然深深植根于 Prolog。 Prolog 深受 Carl Hewitt 的 PLANNER 的影响。

Smalltalk 也深受后来的 ARPANet(甚至后来的互联网)的影响; Erlang 是为网络系统设计的。

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

Erlang 有多个“层”:

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

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

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

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

【讨论】:

  • 谢谢,很有帮助!
猜你喜欢
  • 2011-10-14
  • 2023-03-08
  • 1970-01-01
  • 2015-10-23
  • 1970-01-01
  • 2011-12-09
  • 2022-01-19
  • 2018-08-04
  • 1970-01-01
相关资源
最近更新 更多