演員模型
在電腦科學中,演員模型(英語:Actor model)是一種並行運算上的模型。「演員」是一種程式上的抽象概念,被視為並行運算的基本單元:當一個演員接收到一則訊息,它可以做出一些決策、建立更多的演員、傳送更多的訊息、決定要如何回答接下來的訊息。演員可以修改它們自己的私有狀態,但是只能通過消息間接的相互影響(避免了基於鎖的同步)。
演員模型在1973年於Carl Hewitt、Peter Bishop及Richard Steiger的論文中提出[1]。它已經被用作並發計算的理論理解框架和並發系統的實際實現基礎。演員模型和其他類似工作的關係討論可見於演員模型和進程演算。
基本概念
[編輯]演員模型推崇的哲學是「一切皆是演員」,這與面向對象編程的「一切皆是對象」類似。
演員是一個運算實體,響應接收到的消息,相互間是並發的:
- 發送有限數量的消息給其他演員;
- 創建有限數量的新演員;
- 指定接收到下一個消息時要用到的行為。
以上動作不含有順序執行的假設,因此可以並行進行。
發送者與已發送通信的解耦,是演員模型的根本優勢,演員模型啟用了異步通信並將控制結構當作消息傳遞的模式[2]。
消息接收者是通過地址區分的,有時也被稱作「郵件地址」。因此演員只能和它擁有地址的演員通信。它可以通過接收到的信息獲取地址,或者獲取它創建的演員的地址。
演員模型的特徵是,演員內部或相互之間的計算本質上是並發性的,演員可以動態創建,演員地址包含在消息中,交互只有通過直接的異步消息傳遞通信,不限制消息到達的順序。
歷史
[編輯]演員模型受到了Lisp、Simula、Smalltalk-72、基於權限的系統和分組交換的影響。其發展「受到由幾十、幾百、甚至幾千個獨立微處理機構成的高度並行計算機器的前景所推動,其中的每個處理機都有自己局部內存和通信處理器,它們通過高性能網絡進行通信。」[3]此後隨着採用多核和眾核計算機架構的大規模並發計算的出現,人們已經重新燃起了對演員模型的興趣。
在Hewitt、Bishop和Steiger的1973年刊物之後,Irene Greif在1975年博士論文中,為演員模型開發出了一種操作語義[4]。Henry Baker和Hewitt在1977年發表了演員系統的公理法則[5][6]。其他主要的里程碑包括:William Clinger的1981年學位論文,它介入了基於冪域的指稱語義[3];還有Gul Agha的1985年學位論文,它進一步發展出基於transition的語義模型,從而補充了Clinger的模型[7]。這些工作促成了演員模型理論的全面發展。
主要的軟件實現工作,由麻省理工學院的消息傳遞語義小組完成,其成員包括Russ Atkinson、Giuseppe Attardi、Henry Baker、Gerry Barber、Peter Bishop、Peter de Jong、Ken Kahn、Henry Lieberman、Carl Manning、Tom Reinhardt、Richard Steiger和Dan Theriault。分別由加州理工學院的Chuck Seitz和麻省理工學院的Bill Dally領導的研究小組,致力於構造新的計算機架構,用以進一步發展演員模型中的消息傳遞。有關工作詳見演員模型實現。
演員模型的研究,已經開展於加州理工學院、京都大學、微電子及計算機技術公司、MIT人工智能實驗室、斯坦福國際研究所、斯坦福大學、伊利諾伊大學厄巴納-香檳分校[8]、巴黎第六大學、比薩大學、東京大學米澤研究室、荷蘭數學和計算機科學研究學會和其他一些地方。
使用演員模型編程
[編輯]一些編程語言使用了演員模型或變種。這些語言包括:
早期的演員模型編程語言
[編輯]後期的演員模型編程語言
[編輯]演員模型庫及框架
[編輯]演員模型庫及框架,允許用戶在沒有內置演員模型的語言中進行編程。這些框架包括:
名稱 | 狀態 | 最新發行 | 許可證 | 語言 |
---|---|---|---|---|
ReActed[26] | 活躍 | 2022-11-30 | Apache 2.0 | Java |
Acteur[27] | 活躍 | 2020-04-16[28] | Apache-2.0 / MIT | Rust |
Bastion[29] | 活躍 | 2020-08-12[30] | Apache-2.0 / MIT | Rust |
Actix[31] | 活躍 | 2019-05-30[32] | MIT | Rust |
Aojet[33] | 活躍 | 2016-10-17 | MIT | Swift |
Actor[34] | 活躍 | 2017-03-09 | MIT | Java |
Actor4j[35] | 活躍 | 2020-01-31 | Apache 2.0 | Java |
Actr[36] | 活躍 | 2019-04-09[37] | Apache 2.0 | Java |
Vert.x[38] | 活躍 | 2018-02-13 | Apache 2.0 | Java, Groovy, Javascript, Ruby, Scala, Kotlin, Ceylon |
ActorFx[39] | 不活躍 | 2013-11-13 | Apache 2.0 | .NET |
Akka | 活躍 | 2022-09-06[40] | Apache 2.0 | Java and Scala |
Akka.NET[41] | 活躍 | 2020-08-20[42] | Apache 2.0 | .NET |
Apache Pekko[43] | 活躍 | 2023-07-26[44] | Apache 2.0 | Java and Scala |
Remact.Net[45] | 不活躍 | 2016-06-26 | MIT | .NET, Javascript |
Ateji PX[46] | 不活躍 | ? | ? | Java |
czmq[47] | 活躍 | 2016-11-10 | MPL-2 | C |
F# MailboxProcessor | 活躍 | 同於F# (內建核心庫) | Apache License | F# |
Korus[48] | 活躍 | 2010-02-04 | GPL 3 | Java |
Kilim[49][50] | 活躍 | 2018-11-09[51] | MIT | Java |
ActorFoundry (基於Kilim) | 不活躍 | 2008-12-28 | ? | Java |
ActorKit[52] | 活躍 | 2011-09-13[53] | BSD | Objective-C |
Cloud Haskell[54] | 活躍 | 2015-06-17[55] | BSD | Haskell |
CloudI[56] | 活躍 | 2023-10-27[57] | MIT | ATS, C/C++, Elixir/Erlang/LFE, Go, Haskell, Java, Javascript, OCaml, Perl, PHP, Python, Ruby |
Clutter[58] | 活躍 | 2017-05-12[59] | LGPL 2.1 | C, C++ (cluttermm), Python (pyclutter), Perl (perl-Clutter) |
NAct[60] | 不活躍 | 2012-02-28 | LGPL 3.0 | .NET |
Nact[61] | 活躍 | 2018-06-06[62] | Apache 2.0 | JavaScript/ReasonML |
Retlang[63] | 不活躍 | 2011-05-18[64] | New BSD | .NET |
JActor[65] | 不活躍 | 2013-01-22 | LGPL | Java |
Jetlang[66] | 活躍 | 2013-05-30[67] | New BSD | Java |
Haskell-Actor[68] | 不活躍? | 2008 | New BSD | Haskell |
GPars[69] | 活躍 | 2014-05-09[70] | Apache 2.0 | Groovy |
OOSMOS[71] | 活躍 | 2019-05-09[72] | GPL 2.0和商業(雙許可證) | C. C++ friendly |
Panini[73] | 活躍 | 2014-05-22 | MPL 1.1 | 自己的編程語言 |
PARLEY[74] | 不活躍? | 2007-22-07 | GPL 2.1 | Python |
Peernetic[75] | 活躍 | 2007-06-29 | LGPL 3.0 | Java |
PostSharp[76] | 活躍 | 2014-09-24 | 商業 / Freemium | .NET |
Pulsar[77] | 活躍 | 2016-07-09[78] | New BSD | Python |
Pulsar[79] | 活躍 | 2016-02-18[80] | LGPL/Eclipse | Clojure |
Pykka[81] | 活躍 | 2019-05-07[82] | Apache 2.0 | Python |
Termite Scheme[83] | 不活躍? | 2009-05-21 | LGPL | Scheme (Gambit實現) |
Theron[84] | 不活躍[85] | 2014-01-18[86] | MIT[87] | C++ |
Thespian[88] | 活躍 | 2020-03-10 | MIT | Python |
Quasar[89] | 活躍 | 2018-11-02[90] | LGPL/Eclipse | Java |
Libactor[91] | 不活躍? | 2009 | GPL 2.0 | C |
Actor-CPP[92] | 活躍 | 2012-03-10[93] | GPL 2.0 | C++ |
S4[94] | 不活躍 | 2012-07-31[95] | Apache 2.0 | Java |
C++ Actor Framework (CAF)[96] | 活躍 | 2020-02-08[97] | Boost Software License 1.0 and BSD 3-Clause | C++11 |
Celluloid[98] | 活躍 | 2018-12-20[99] | MIT | Ruby |
LabVIEW Actor Framework[100] | 活躍 | 2012-03-01[101] | National Instruments SLA[102] | LabVIEW |
LabVIEW Messenger Library[103] | 活躍 | 2021-05-24 | BSD | LabVIEW |
Otavia[104] | 活躍 | 2024-01-02 | Apache 2.0 | Scala |
Orbit[105] | 活躍 | 2019-05-28[106] | New BSD | Java |
QP框架 | 活躍 | 2019-05-25[107] | GPL 2.0和商業(雙許可證) | C and C++ |
libprocess[108] | 活躍 | 2013-06-19 | Apache 2.0 | C++ |
SObjectizer[109] | 活躍 | 2021-12-28[110] | New BSD | C++11 |
rotor[111] | 活躍 | 2022-04-23[112] | MIT License | C++17 |
Orleans[113] | 活躍 | 2023-07-11[114] | MIT License | C#/.NET |
Skynet[115] | 活躍 | 2016-07-11 | MIT License | C/Lua |
Reactors.IO[116] | 活躍 | 2016-06-14 | BSD License | Java/Scala |
libagents[117] | 活躍 | 2020-03-08 | Free software license | C++11 |
Proto.Actor[118] | 活躍 | 2021-01-05 | Free software license | Go, C#, Python, JavaScript, Java, Kotlin |
FunctionalJava[119] | 活躍 | 2018-08-18[120] | BSD 3-Clause | Java |
Riker[121] | 活躍 | 2019-01-04 | MIT License | Rust |
Comedy[122] | 活躍 | 2019-03-09 | EPL 1.0 | JavaScript |
VLINGO XOOM Actors[123] | 活躍 | 2023-02-15 | Mozilla Public License 2.0 | Java, Kotlin, JVM languages, C# .NET |
wasmCloud[124] | 活躍 | 2021-03-23 | Apache 2.0 | WebAssembly (Rust, TinyGo, Zig, AssemblyScript) |
ray[125] | 活躍 | 2020-08-27 | Apache 2.0 | Python |
DOTNETACTORS[126] | 活躍 | 2021-06-14 | MIT | .NET, C#, Azure Service Bus |
go-actor[127] | 活躍 | 2022-08-16 | GPL 3.0 | Golang |
Sento[128] | 活躍 | 2022-11-21 | Apache 2.0 | Common Lisp |
Xcraft Goblins[129] | 活躍 | 2022-08-30 | MIT | JavaScript |
Tarant[130] | 活躍 | 2023-04-17 | MIT | Typescript, Javascript |
注意這裡沒有列出全部框架和庫。
並發編程語言用例
[編輯]儘管Erlang語言設計者並未如此表述[131],因其進程間通信是通過無共享異步消息傳遞系統運作,它一般被引證為採用演員模型的典型代表之一。在Erlang中,所有進程都有一個自己的「郵箱」,它是從其他進程已經發送過來而仍未被消費的消息的隊列。進程使用receive
原語來檢索匹配預期模式的消息。一個消息處理例程針對每個模式依次測試這些消息,直到其中有一個匹配。在消息被消費並從郵箱中移除之時進程恢復執行。消息可以包含任何Erlang結構,包括原始類型(整數,浮點數、字符、原子)、元組、列表和函數。
下面例子展示了Erlang對分布式進程的內建支持:
% 建立一个进程并启用函数web:start_server(Port, MaxConnections)
ServerProcess = spawn(web, start_server, [Port, MaxConnections]),
% 在机器RemoteNode上建立一个远程进程并启用函数web:start_server(Port, MaxConnections)
RemoteProcess = spawn(RemoteNode, web, start_server, [Port, MaxConnections]),
% (异步的)发送消息到ServerProcess。消息包含一个元组,它具有原子"pause"和数"10"。
ServerProcess ! {pause, 10},
% 接收发给这个进程的消息
receive
a_message -> do_something;
{data, DataContent} -> handle(DataContent);
{hello, Text} -> io:format("Got hello message: ~s", [Text]);
{goodbye, Text} -> io:format("Got goodbye message: ~s", [Text])
end.
原型的演員編程語言
[編輯]Hewitt在2006年發表了一個原型的演員編程語言,用意在於直接表達演員行為的重要方面[132]。消息採用如下表示法:
- <標籤>[<元素>1 ... <元素>n]
編程語言的語義是通過將每個程序構造確定為有自己行為的演員來定義的。執行是通過在執行期間讓Eval消息在程序構造之間傳遞來建模的。
環境演員
[編輯]每個Eval消息都有一個充當環境的演員的地址,它能夠進行標識符與值的綁定(binding)。environment演員是不可變的(immutable),也就是不變更的。
- 當一個environment演員收到Request[Bind[identifier value] customer]的時候,建立一個新的環境演員environment』發送給customer,使得這個新環境演員收到Request[Lookup[identifier』] customer』]的時候,如果identifier同於identifier』,則發送給customer』一個Returned[value],否則發送給environment一個Request[Lookup[identifier』] customer』]。
- 當一個environment演員收到Request[Bind[<模式> String] customer]的時候,如果此<模式>形如Request[msg[paramerer] customer],匹配於String形如Request[msg[argument] customer],則建立一個新的環境演員environment』發送給customer,使得這個新環境演員收到Request[Lookup[parameter』] customer』]的時候,如果parameter』同於parameter,則發送給customer』一個Returned[argument],否則發送給customer一個Thrown[NotFound[<模式>]]。
- 當一個environment演員收到Request[Bind[identifier(parameter) value] customer]的時候,建立一個新的環境演員environment』發送給customer,使得這個新環境演員收到Request[Lookup[identifier』(argument)] customer』]的時候,如果identifier同於identifier』,則建立一個新的環境演員environment』』,發送給customer』一個Returned[value]和一個Returned[environment』』],否則發送給environment一個Request[Lookup[identifier』(argument)] customer』]。這個新環境演員environment』』在收到Request[Lookup[parameter』] customer』]的時候,如果parameter』同於parameter,則發送給customer』一個Returned[argument],否則發送給environment』一個Request[Lookup[parameter』] customer』]。
上述環境演員建造在EmptyEnvironment演員之上,它在接收到Request[Lookup[identifier] customer]的時候,發送給customer一個Thrown[NotFound[identifier]]。當它收到Bind請求的時候,EmptyEnvironment表現的如同上述環境演員。
表達式
[編輯]原型語言有如下種類的表達式,這裡的通信包括Request[...]、Returned[...]和Thrown[...],這裡的消息包括Eval[...]、Bind[...]和Lookup[...]:
- <標識符>
- 在收到Request[Eval[environment] customer]的時候,發送給environment一個Request[Lookup[<標識符>] customer]。
- send <接收者> <通信>
- 在收到Request[Eval[environment] customer]的時候,建立一個新演員evalCustomer1,發送給<接收者>一個Request[Eval[environment] evalCustomer1],使得
- 在evalCustomer1收到通信Returned[theRecipient]的時候,建立一個新演員evalCustomer2,發送給<通信>一個Request[Eval[environment] evalCustomer2],使得
- 在evalCustomer2收到通信Returned[theCommunication]的時候,發送給theRecipient一個theCommunication。
- <接收者>.<消息>
- 在收到Request[Eval[environment] customer]的時候,建立一個新演員evalCustomer1,發送<接收者>一個Request[Eval[environment] evalCustomer1],使得
- 在evalCustomer1收到通信Returned[theRecipient]的時候,建立一個新演員evalCustomer2,發送給<消息>一個Request[Eval[environment] evalCustomer2],使得
- 在 evalCustomer2收到通信Returned[theMessage]的時候,發送給theRecipient一個Request[theMessage customer]。
- receiver ... <模式>i <表達式>i ...
- 在收到Request[Eval[environment] customer]的時候,發送給customer一個新演員theReceiver,使得
- 在theReceiver收到通信內容com的時候,建立一個新演員bindingCustomer,並發送給environment一個Request[Bind[<模式>i com] bindingCustomer],而且
- 如果bindingCustomer收到Returned[environment』],發送給<表達式>i一個Request[Eval[environment』]]
- 不然如果bindingCustomer收到Thrown[...],嘗試<模式>i+1。
- behavior ... <模式>i <表達式>i ...
- 在收到Request[Eval[environment] customer]的時候,發送給customer一個新演員theReceiver,使得
- 在theReceiver收到Request[message customer』]的時候,建立一個新演員bindingCustomer,並發送給environment一個Request[bind[<模式>i message] customer』],而且
- 如果bindingCustomer收到Returned[environment』],發送給<表達式>i一個Request[Eval[environment』] customer』]
- 不然如果bindingCustomer收到Thrown[...],嘗試<模式>i+1。
- {<表達式>1, <表達式>2}
- 在收到Request[Eval[environment] customer]的時候,發送給<表達式>1一個Request[Eval[environment]],而且並發的發送給<表達式>2一個Request[Eval[environment] customer]。
- let <標識符> = <表達式>值 in <表達式>體
- 在收到message[Eval[environment] customer]的時候,建立一個新演員evalCustomer,並發送給<表達式>值一個Request[Eval[environment] evalCustomer]。
- 在evalCustomer收到Returned[theValue]的時候,建立一個新演員bindingCustomer,並發送給environment一個Request[bind[<標識符> theValue] bindingCustomer]。
- 在bindingCustomer收到Returned[environment』]的時候,發送給<expression>體一個Request[Eval[environment』] customer]。
- serializer <表達式>
- 在收到Request[Eval[environment] customer]的時候,發送給customer一個Returned[theSerializer],這裡的theSerializer是新演員,使得發送到theSerializer的通信按FIFO次序由行為演員處理,行為演員初始是<表達式>.Eval[environment],而且
- 在theSerializer收到通信內容com的時候,建立一個新演員customer』,發送給行為演員一個Request[com customer』],使得
- 在customer』收到Returned[value]和Returned[theNextBehavior]的時候,Returned[value]被發送給customer,而theNextBehavior被theSerializer用作下次通信的行為演員。
例子程序
[編輯]下面是簡單的存儲單元格(cell)的例子腳本(script),它可以包含任何演員地址:
- Cell ≡
- receiver
- Request[Create[initial] customer]
- send customer Returned[serializer ReadWrite(initial)]
- Request[Create[initial] customer]
- receiver
上述腳本將建立一個存儲單元格,它採用的行為ReadWrite定義如下:
- ReadWrite(contents) ≡
- behavior
- Request[read[] customer]
- {send customer Returned[contents], Returned[ReadWrite(contents)]}
- Request[write[x] customer]
- {send customer Returned[], Returned[ReadWrite(x)]}
- Request[read[] customer]
- behavior
例如,下列表達式建立一個單元格x,具有初始內容5,並接着並發的向它寫值7和9。
- let x = Cell.Create[5] in {x.write[7], x.write[9], x.read[]}
上述表達式的值是5、7或9。
影響
[編輯]演員模型在並發計算的理論發展和實踐軟件開發中都有影響。
理論
[編輯]演員模型影響了π-演算和隨後的進程演算的發展。在Robin Milner的圖靈獎獲獎演說中,他寫到[133]:
純lambda演算現在只使用兩種東西來建造:項和變量。我們在進程演算上也能實現同樣的經濟性嗎?Carl Hewitt憑藉其演員模型,很久以前就應對了這個挑戰;他宣告了值、在值上的算子和進程,都應該是同一種東西:即演員。
這個目標打動了我,因為它蘊涵了表達式有着同質性和完整性 ... 但是很久以後我才明白了如何依據代數演算來達成這個目標 ...
因此本着Hewitt的精神,我們的第一步,就是要求由項指示或由名字訪問的所有東西,包括值、寄存器、算子、進程、對象,都是同一種東西;它們都應當是進程。
實踐
[編輯]演員模型在商業實踐中已經有了巨大的影響。例如,Twitter將演員用於可伸縮性應用[134]。還有,Microsoft在其開發的異步代理庫中使用了演員模型[135]。
參見
[編輯]引用
[編輯]- ^ Carl Hewitt; Peter Bishop and Richard Steiger. A Universal Modular Actor Formalism for Artificial Intelligence (PDF). IJCAI. 1973 [2020-05-06]. (原始內容存檔 (PDF)於2021-02-25).
- ^ Carl Hewitt. Viewing Control Structures as Patterns of Passing Messages (頁面存檔備份,存於網際網路檔案館). Journal of Artificial Intelligence. June 1977.
- ^ 3.0 3.1 William Clinger. Foundations of Actor Semantics. Mathematics Doctoral Dissertation. MIT. June 1981. hdl:1721.1/6935.
- ^ Irene Greif. Semantics of Communicating Parallel Processes. EECS Doctoral Dissertation. MIT. August 1975.
- ^ Henry Baker; Carl Hewitt. Laws for Communicating Parallel Processes. IFIP. August 1977.
- ^ Laws for Communicating Parallel Processes (PDF). 10 May 1977 [2020-05-04]. (原始內容存檔 (PDF)於2016-06-24).
- ^ Gul Agha. Actors: A Model of Concurrent Computation in Distributed Systems. Doctoral Dissertation. MIT Press. 1986. hdl:1721.1/6952.
- ^ Home. Osl.cs.uiuc.edu. [2012-12-02]. (原始內容存檔於2013-02-22).
- ^ Henry Lieberman. A Preview of Act 1. MIT AI memo 625. June 1981.
- ^ Henry Lieberman. Thinking About Lots of Things at Once without Getting Confused: Parallelism in Act 1. MIT AI memo 626. June 1981.
- ^ Jean-Pierre Briot. Acttalk: A framework for object-oriented concurrent programming-design and experience 2nd France-Japan workshop. 1999.
- ^ Ken Kahn. A Computational Theory of Animation MIT EECS Doctoral Dissertation. August 1979.
- ^ William Athas and Nanette Boden Cantor: An Actor Programming System for Scientific Computing in Proceedings of the NSF Workshop on Object-Based Concurrent Programming. 1988. Special Issue of SIGPLAN Notices.
- ^ Darrell Woelk. Developing InfoSleuth Agents Using Rosette: An Actor Based Language Proceedings of the CIKM '95 Workshop on Intelligent Information Agents. 1995.
- ^ Dedecker J., Van Cutsem T., Mostinckx S., D'Hondt T., De Meuter W. Ambient-oriented Programming in AmbientTalk. In 「Proceedings of the 20th European Conference on Object-Oriented Programming (ECOOP), Dave Thomas (Ed.), Lecture Notes in Computer Science Vol. 4067, pp. 230-254, Springer-Verlag.」, 2006
- ^ Darryl K. Taft. Microsoft Cooking Up New Parallel Programming Language. Eweek.com. 2009-04-17 [2012-12-02]. (原始內容存檔於2012-07-29).
- ^ Brandauer, Stephan; et al. Parallel objects for multicores: A glimpse at the parallel language encore.. Formal Methods for Multicore Programming. (Springer International Publishing). 2015: 1–56.
- ^ Humus. Dalnefre.com. [2012-12-02]. (原始內容存檔於2021-02-07).
- ^ The Pony Language. [2022-01-11]. (原始內容存檔於2018-09-04).
- ^ Clebsch, Sylvan; Drossopoulou, Sophia; Blessing, Sebastian; McNeil, Andy. Deny capabilities for safe, fast actors. Proceedings of the 5th International Workshop on Programming Based on Actors, Agents, and Decentralized Control - AGERE! 2015. 2015: 1–12. ISBN 9781450339018. doi:10.1145/2824815.2824816. by Sylvan Clebsch, Sophia Drossopoulou, Sebastian Blessing, Andy McNeil
- ^ The P Language. 2019-03-08 [2020-05-06]. (原始內容存檔於2021-01-15).
- ^ The P# Language. 2019-03-12 [2020-05-06]. (原始內容存檔於2021-03-23).
- ^ Carlos Varela and Gul Agha. Programming Dynamically Reconfigurable Open Systems with SALSA. ACM SIGPLAN Notices. OOPSLA'2001 Intriguing Technology Track Proceedings. 2001, 36.
- ^ Philipp Haller and Martin Odersky. Event-Based Programming without Inversion of Control (PDF). Proc. JMLC 2006. September 2006 [2014-08-04]. (原始內容存檔 (PDF)於2020-11-09).
- ^ Philipp Haller and Martin Odersky. Actors that Unify Threads and Events (PDF). Technical report LAMP 2007. January 2007 [2014-08-04]. (原始內容 (PDF)存檔於2011-06-07).
- ^ ReActed (頁面存檔備份,存於網際網路檔案館)
- ^ Acteur (頁面存檔備份,存於網際網路檔案館)
- ^ acteur - 0.9.1· David Bonet · Crates.io. crates.io. [2020-04-16]. (原始內容存檔於2021-02-05).
- ^ Bastion (頁面存檔備份,存於網際網路檔案館)
- ^ Bulut, Mahmut. Bastion on Crates.io. Crates.io. 2019-12-15 [2019-12-15]. (原始內容存檔於2021-02-05).
- ^ Actix (頁面存檔備份,存於網際網路檔案館)
- ^ actix - 0.8.3· Nikolay Kim · Crates.io. crates.io. [2019-06-03]. (原始內容存檔於2021-02-05).
- ^ Aojet (頁面存檔備份,存於網際網路檔案館)
- ^ Actor (頁面存檔備份,存於網際網路檔案館)
- ^ Actor4j (頁面存檔備份,存於網際網路檔案館)
- ^ Actr (頁面存檔備份,存於網際網路檔案館)
- ^ Releases · zakgof/actr · GitHub. Github.com. [2019-04-16]. (原始內容存檔於2020-10-26).
- ^ Vert.x (頁面存檔備份,存於網際網路檔案館)
- ^ ActorFx (頁面存檔備份,存於網際網路檔案館)
- ^ Akka 2.6.20 Released · Akka. Akka. 2022-09-06 [2022-12-23]. (原始內容存檔於2022-09-24).
- ^ Akka.NET (頁面存檔備份,存於網際網路檔案館)
- ^ Akka.NET v1.4.10 Stable Release GitHub - akkadotnet/akka.net: Port of Akka actors for .NET., Akka.NET, 2020-10-01 [2020-10-01], (原始內容存檔於2021-02-24)
- ^ Apache Pekko. [2024-02-13]. (原始內容存檔於2024-02-10).
- ^ Apache Pekko (Incubating), Apache Software Foundation, [2024-02-13], (原始內容存檔於2023-12-04)
- ^ Remact.Net (頁面存檔備份,存於網際網路檔案館)
- ^ Ateji PX
- ^ czmq (頁面存檔備份,存於網際網路檔案館)
- ^ Korus (頁面存檔備份,存於網際網路檔案館)
- ^ Kilim (頁面存檔備份,存於網際網路檔案館)
- ^ Srinivasan, Sriram; Alan Mycroft. Kilim: Isolation-Typed Actors for Java (PDF). European Conference on Object Oriented Programming ECOOP 2008. Cyprus. 2008 [2016-02-25]. (原始內容存檔 (PDF)於2020-10-28).
- ^ Releases · kilim/kilim · GitHub. Github.com. [2019-06-03]. (原始內容存檔於2020-10-16).
- ^ ActorKit (頁面存檔備份,存於網際網路檔案館)
- ^ Commit History · stevedekorte/ActorKit · GitHub. Github.com. [2016-02-25].
- ^ Cloud Haskell[失效連結]
- ^ Commit History · haskell-distributed/distributed-process · GitHub. Github.com. [2012-12-02]. (原始內容存檔於2017-03-24).
- ^ CloudI (頁面存檔備份,存於網際網路檔案館)
- ^ CloudI: A Cloud at the lowest level · Activity. sourceforge.net. [2024-01-03]. (原始內容存檔於2024-01-04).
- ^ Clutter (頁面存檔備份,存於網際網路檔案館)
- ^ Tags · GNOME/clutter · GitLab. gitlab.gnome.org. [2019-06-03]. (原始內容存檔於2019-06-03).
- ^ NAct (頁面存檔備份,存於網際網路檔案館)
- ^ Nact (頁面存檔備份,存於網際網路檔案館)
- ^ Releases · ncthbrt/nact · GitHub. [2019-06-03]. (原始內容存檔於2020-11-27).
- ^ Retlang (頁面存檔備份,存於網際網路檔案館)
- ^ Changes - retlang - Message based concurrency in .NET - Google Project Hosting. [2016-02-25]. (原始內容存檔於2015-11-24).
- ^ JActor
- ^ Jetlang (頁面存檔備份,存於網際網路檔案館)
- ^ jetlang-0.2.9-bin.zip - jetlang - jetlang-0.2.9-bin.zip - Message based concurrency for Java - Google Project Hosting. 2012-02-14 [2016-02-25]. (原始內容存檔於2016-01-14).
- ^ Haskell-Actor (頁面存檔備份,存於網際網路檔案館)
- ^ GPars (頁面存檔備份,存於網際網路檔案館)
- ^ GPars Releases. GitHub. [2016-02-25]. (原始內容存檔於2020-09-04).
- ^ OOSMOS (頁面存檔備份,存於網際網路檔案館)
- ^ Releases · oosmos/oosmos · GitHub. GitHub. [2019-06-03]. (原始內容存檔於2020-11-13).
- ^ Panini (頁面存檔備份,存於網際網路檔案館)
- ^ PARLEY
- ^ Peernetic
- ^ PostSharp (頁面存檔備份,存於網際網路檔案館)
- ^ Pulsar (頁面存檔備份,存於網際網路檔案館)
- ^ Pulsar Design and Actors. (原始內容存檔於2015-07-04).
- ^ Pulsar (頁面存檔備份,存於網際網路檔案館)
- ^ Pulsar documentation. (原始內容存檔於2013-07-26).
- ^ Pykka (頁面存檔備份,存於網際網路檔案館)
- ^ Changes – Pykka 2.0.0 documentation. pykka.org. [2019-06-03]. (原始內容存檔於2021-02-05).
- ^ Termite Scheme (頁面存檔備份,存於網際網路檔案館)
- ^ Theron
- ^ Theron – Ashton Mason. [2018-08-29]. (原始內容存檔於2019-03-31).
- ^ Theron - Version 6.00.02 released. Theron-library.com. [2016-02-25]. (原始內容存檔於2016-03-16).
- ^ Theron. Theron-library.com. [2016-02-25]. (原始內容存檔於2016-03-04).
- ^ Thespian (頁面存檔備份,存於網際網路檔案館)
- ^ Quasar (頁面存檔備份,存於網際網路檔案館)
- ^ Releases · puniverse/quasar · GitHub. [2019-06-03]. (原始內容存檔於2020-12-15).
- ^ Libactor (頁面存檔備份,存於網際網路檔案館)
- ^ Actor-CPP (頁面存檔備份,存於網際網路檔案館)
- ^ Changes - actor-cpp - An implementation of the actor model for C++ - Google Project Hosting. [2012-12-02]. (原始內容存檔於2015-11-18).
- ^ S4 (頁面存檔備份,存於網際網路檔案館)
- ^ Commit History · s4/s4 · Apache. apache.org. [2016-01-16]. (原始內容存檔於2016-03-06).
- ^ C++ Actor Framework (CAF) (頁面存檔備份,存於網際網路檔案館)
- ^ Releases · actor-framework/actor-framework · GitHub. Github.com. [2020-03-07]. (原始內容存檔於2021-03-26).
- ^ Celluloid (頁面存檔備份,存於網際網路檔案館)
- ^ celluloid | RubyGems.org | your community gem host. RubyGems.org. [2019-06-03]. (原始內容存檔於2020-09-29).
- ^ LabVIEW Actor Framework
- ^ Community: Actor Framework, LV 2011 revision (version 3.0.7). Decibel.ni.com. 2011-09-23 [2016-02-25]. (原始內容存檔於2016-10-13).
- ^ National Instruments SLA (頁面存檔備份,存於網際網路檔案館)
- ^ LabVIEW Messenger Library (頁面存檔備份,存於網際網路檔案館)
- ^ Otavia. [2024-02-13]. (原始內容存檔於2024-01-10).
- ^ Orbit (頁面存檔備份,存於網際網路檔案館)
- ^ Releases · orbit/orbit · GitHub. GitHub. [2019-06-03].
- ^ QP Real-Time Embedded Frameworks & Tools - Browse Files at. Sourceforge.net. [2019-06-03]. (原始內容存檔於2021-02-24).
- ^ libprocess (頁面存檔備份,存於網際網路檔案館)
- ^ SObjectizer (頁面存檔備份,存於網際網路檔案館)
- ^ Releases · Stiffstream/sobjectizer · GitHub. GitHub. [2022-05-11]. (原始內容存檔於2020-10-19).
- ^ rotor (頁面存檔備份,存於網際網路檔案館)
- ^ Releases · basiliscos/cpp-rotor· GitHub. GitHub. [2022-05-17]. (原始內容存檔於2020-09-15).
- ^ Orleans (頁面存檔備份,存於網際網路檔案館)
- ^ Releases · dotnet/orleans · GitHub. GitHub. [2022-09-21]. (原始內容存檔於2020-12-04).
- ^ Skynet (頁面存檔備份,存於網際網路檔案館)
- ^ Reactors.IO (頁面存檔備份,存於網際網路檔案館)
- ^ libagents (頁面存檔備份,存於網際網路檔案館)
- ^ Proto.Actor (頁面存檔備份,存於網際網路檔案館)
- ^ FunctionalJava (頁面存檔備份,存於網際網路檔案館)
- ^ FunctionalJava releases. GitHub. [2018-08-23]. (原始內容存檔於2021-01-15).
- ^ Riker (頁面存檔備份,存於網際網路檔案館)
- ^ Comedy (頁面存檔備份,存於網際網路檔案館)
- ^ VLINGO XOOM Actors. [2021-01-15]. (原始內容存檔於2020-11-29).
- ^ wasmCloud. [2023-07-02]. (原始內容存檔於2023-07-02).
- ^ ray (頁面存檔備份,存於網際網路檔案館)
- ^ DOTNETACTORS. [2022-12-23]. (原始內容存檔於2022-12-24).
- ^ go-actor. [2022-12-23]. (原始內容存檔於2022-12-23).
- ^ Sento. [2022-12-23]. (原始內容存檔於2023-04-05).
- ^ Xcraft Goblins. [2022-12-23]. (原始內容存檔於2023-06-07).
- ^ Tarant. [2023-07-02]. (原始內容存檔於2023-05-27).
- ^ Armstrong, Joe. Erlang. Communications of the ACM. September 2010, 53 (9): 68–75 [2020-05-07]. doi:10.1145/1810891.1810910. (原始內容存檔於2020-06-09).
Erlang is conceptually similar to the occam programming language, though it recasts the ideas of CSP in a functional framework and uses asynchronous message passing instead of the synchronous message passing in CSP.
- ^ Carl Hewitt. The repeated demise of logic programming and why it will be reincarnated. What Went Wrong and Why: Lessons from AI Research and Applications. Technical Report SS-06-08. AAAI Press. March 2006.
- ^ Milner, Robin. Elements of interaction. Communications of the ACM. 1993, 36: 78–89. doi:10.1145/151233.151240.
- ^ How Twitter Is Scaling « Waiming Mok's Blog. Waimingmok.wordpress.com. 2009-06-27 [2012-12-02]. (原始內容存檔於2021-02-05).
- ^ "Actor-Based Programming with the Asynchronous Agents Library (頁面存檔備份,存於網際網路檔案館)" MSDN September 2010.
延伸閱讀
[編輯]- Gul Agha. Actors: A Model of Concurrent Computation in Distributed Systems (頁面存檔備份,存於網際網路檔案館). MIT Press 1985.
- Paul Baran. On Distributed Communications Networks IEEE Transactions on Communications Systems. March 1964.
- William A. Woods. Transition network grammars for natural language analysis (頁面存檔備份,存於網際網路檔案館) CACM. 1970.
- Carl Hewitt. Procedural Embedding of Knowledge In Planner (頁面存檔備份,存於網際網路檔案館) IJCAI 1971.
- G.M. Birtwistle, Ole-Johan Dahl, B. Myhrhaug and Kristen Nygaard. SIMULA Begin Auerbach Publishers Inc, 1973.
- Carl Hewitt, et al. Actor Induction and Meta-evaluation Conference Record of ACM Symposium on Principles of Programming Languages, January 1974.
- Carl Hewitt, Behavioral Semantics of Nonrecursive Control Structure (頁面存檔備份,存於網際網路檔案館) Proceedings of Colloque sur la Programmation, April 1974.
- Irene Greif and Carl Hewitt. Actor Semantics of PLANNER-73 (頁面存檔備份,存於網際網路檔案館) Conference Record of ACM Symposium on Principles of Programming Languages. January 1975.
- Carl Hewitt. How to Use What You Know (頁面存檔備份,存於網際網路檔案館) IJCAI. September, 1975.
- Alan Kay and Adele Goldberg. Smalltalk-72 Instruction Manual. Xerox PARC Memo SSL-76-6. May 1976.
- Edsger Dijkstra. A discipline of programming Prentice Hall. 1976.
- Carl Hewitt and Henry Baker Actors and Continuous Functionals Proceeding of IFIP Working Conference on Formal Description of Programming Concepts. August 1–5, 1977.
- Carl Hewitt and Russ Atkinson. Synchronization in Actor Systems Proceedings of the 4th ACM SIGACT-SIGPLAN symposium on Principles of programming languages. 1977
- Carl Hewitt and Russ Atkinson. Specification and Proof Techniques for Serializers (頁面存檔備份,存於網際網路檔案館) IEEE Journal on Software Engineering. January 1979.
- Ken Kahn. A Computational Theory of Animation (頁面存檔備份,存於網際網路檔案館) MIT EECS Doctoral Dissertation. August 1979.
- Carl Hewitt, Beppe Attardi, and Henry Lieberman. Delegation in Message Passing Proceedings of First International Conference on Distributed Systems Huntsville, AL. October 1979.
- Nissim Francez, C.A.R. Hoare, Daniel Lehmann, and Willem-Paul de Roever. Semantics of nondetermiism, concurrency, and communication Journal of Computer and System Sciences. December 1979.
- George Milne and Robin Milner. Concurrent processes and their syntax JACM. April 1979.
- Daniel Theriault. A Primer for the Act-1 Language MIT AI memo 672. April 1982.
- Daniel Theriault. Issues in the Design and Implementation of Act 2 (頁面存檔備份,存於網際網路檔案館) MIT AI technical report 728. June 1983.
- Henry Lieberman. An Object-Oriented Simulator for the Apiary Conference of the American Association for Artificial Intelligence, Washington, D. C., August 1983
- Carl Hewitt and Peter de Jong. Analyzing the Roles of Descriptions and Actions in Open Systems (頁面存檔備份,存於網際網路檔案館) Proceedings of the National Conference on Artificial Intelligence. August 1983.
- Carl Hewitt and Henry Lieberman. Design Issues in Parallel Architecture for Artificial Intelligence MIT AI memo 750. Nov. 1983.
- C.A.R. Hoare. Communicating Sequential Processes (頁面存檔備份,存於網際網路檔案館) Prentice Hall. 1985.
- Carl Hewitt. The Challenge of Open Systems Byte. April 1985. Reprinted in The foundation of artificial intelligence: a sourcebook Cambridge University Press. 1990.
- Carl Manning. Traveler: the actor observatory ECOOP 1987. Also appears in Lecture Notes in Computer Science, vol. 276.
- William Athas and Charles Seitz Multicomputers: message-passing concurrent computers (頁面存檔備份,存於網際網路檔案館) IEEE Computer August 1988.
- William Athas and Nanette Boden Cantor: An Actor Programming System for Scientific Computing in Proceedings of the NSF Workshop on Object-Based Concurrent Programming. 1988. Special Issue of SIGPLAN Notices.
- Jean-Pierre Briot. From objects to actors: Study of a limited symbiosis in Smalltalk-80 (頁面存檔備份,存於網際網路檔案館) Rapport de Recherche 88-58, RXF-LITP, Paris, France, September 1988
- William Dally and Wills, D. Universal mechanisms for concurrency (頁面存檔備份,存於網際網路檔案館) PARLE 1989.
- W. Horwat, A. Chien, and W. Dally. Experience with CST: Programming and Implementation PLDI. 1989.
- Carl Hewitt. Towards Open Information Systems Semantics Proceedings of 10th International Workshop on Distributed Artificial Intelligence. October 23–27, 1990. Bandera, Texas.
- Akinori Yonezawa, Ed. ABCL: An Object-Oriented Concurrent System MIT Press. 1990.
- K. Kahn and Vijay A. Saraswat, "Actors as a special case of concurrent constraint (logic) programming", in SIGPLAN Notices, October 1990. Describes Janus.
- Carl Hewitt. Open Information Systems Semantics Journal of Artificial Intelligence. January 1991.
- Carl Hewitt and Jeff Inman. DAI Betwixt and Between: From "Intelligent Agents" to Open Systems Science (頁面存檔備份,存於網際網路檔案館) IEEE Transactions on Systems, Man, and Cybernetics. Nov./Dec. 1991.
- Carl Hewitt and Gul Agha. Guarded Horn clause languages: are they deductive and Logical? International Conference on Fifth Generation Computer Systems, Ohmsha 1988. Tokyo. Also in Artificial Intelligence at MIT, Vol. 2. MIT Press 1991.
- William Dally, et al. The Message-Driven Processor: A Multicomputer Processing Node with Efficient Mechanisms (頁面存檔備份,存於網際網路檔案館) IEEE Micro. April 1992.
- S. Miriyala, G. Agha, and Y.Sami. Visualizing actor programs using predicate transition nets (頁面存檔備份,存於網際網路檔案館) Journal of Visual Programming. 1992.
- Carl Hewitt and Carl Manning. Negotiation Architecture for Large-Scale Crisis Management AAAI-94 Workshop on Models of Conflict Management in Cooperative Problem Solving. Seattle, WA. Aug. 4, 1994.
- Carl Hewitt and Carl Manning. Synthetic Infrastructures for Multi-Agency Systems Proceedings of ICMAS '96. Kyoto, Japan. December 8–13, 1996.
- S. Frolund. Coordinating Distributed Objects: An Actor-Based Approach for Synchronization MIT Press. November 1996.
- W. Kim. ThAL: An Actor System for Efficient and Scalable Concurrent Computing (頁面存檔備份,存於網際網路檔案館) PhD thesis. University of Illinois at Urbana Champaign. 1997.
- Jean-Pierre Briot. Acttalk: A framework for object-oriented concurrent programming-design and experience 2nd France-Japan workshop. 1999.
- N. Jamali, P. Thati, and G. Agha. An actor based architecture for customizing and controlling agent ensembles (頁面存檔備份,存於網際網路檔案館) IEEE Intelligent Systems. 14(2). 1999.
- Don Box, David Ehnebuske, Gopal Kakivaya, Andrew Layman, Noah Mendelsohn, Henrik Nielsen, Satish Thatte, Dave Winer. Simple Object Access Protocol (SOAP) 1.1 W3C Note. May 2000.
- M. Astley, D. Sturman, and G. Agha. Customizable middleware for modular distributed software (頁面存檔備份,存於網際網路檔案館) CACM. 44(5) 2001.
- Edward Lee, S. Neuendorffer, and M. Wirthlin. Actor-oriented design of embedded hardware and software systems (頁面存檔備份,存於網際網路檔案館) Journal of Circuits, Systems, and Computers. 2002.
- P. Thati, R. Ziaei, and G. Agha. A Theory of May Testing for Actors Formal Methods for Open Object-based Distributed Systems. March 2002.
- P. Thati, R. Ziaei, and G. Agha. A theory of may testing for asynchronous calculi with locality and no name matching Algebraic Methodology and Software Technology. Springer Verlag. September 2002. LNCS 2422.
- Stephen Neuendorffer. Actor-Oriented Metaprogramming (頁面存檔備份,存於網際網路檔案館) PhD Thesis. University of California, Berkeley. December, 2004
- Carl Hewitt (2006a) The repeated demise of logic programming and why it will be reincarnated What Went Wrong and Why: Lessons from AI Research and Applications. Technical Report SS-06-08. AAAI Press. March 2006.
- Carl Hewitt (2006b) What is Commitment? Physical, Organizational, and Social (頁面存檔備份,存於網際網路檔案館) COIN@AAMAS. April 27, 2006b.
- Carl Hewitt (2007a) What is Commitment? Physical, Organizational, and Social (Revised) Pablo Noriega .et al. editors. LNAI 4386. Springer-Verlag. 2007.
- Carl Hewitt (2007b) Large-scale Organizational Computing requires Unstratified Paraconsistency and Reflection (頁面存檔備份,存於網際網路檔案館) COIN@AAMAS'07.
- D. Charousset, T. C. Schmidt, R. Hiesgen and M. Wählisch. Native actors: a scalable software platform for distributed, heterogeneous environments in AGERE! '13 Proceedings of the 2013 workshop on Programming based on actors, agents, and decentralized control.