簡體   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