Content deleted Content added
m moved Actor model early history to History of the Actor model: doesn't look like there's anything 'early' about this page |
m Corrected ref, tidying |
||
(79 intermediate revisions by 52 users not shown) | |||
Line 1:
{{more footnotes|date=February 2013}}
In [[computer science]], the [[Actor model]], first published in 1973, is a mathematical model of [[concurrent computation]].
==Event orderings versus global state==
A fundamental challenge in defining the Actor model is that it did not provide for global states so that a computational step could not be defined as going from one global state to the next global state as had been done in all previous models of computation.
In 1963 in the field of [[Artificial Intelligence]], [[John McCarthy (computer scientist)|John McCarthy]] introduced situation variables in logic in the Situational Calculus. In McCarthy and
From the definition of an Actor, it can be seen that numerous events take place:
==Relationship to physics==
==Models prior to the Actor model==
The Actor model builds on previous models of computation.
===Lambda calculus===
The [[lambda calculus]] of [[Alonzo Church]] can be viewed as the earliest [[message passing]] [[programming language]] (see Hewitt, Bishop, and Steiger 1973; [[Structure and Interpretation of Computer Programs|Abelson and Sussman 1985]]). For example, the lambda expression below implements a tree data structure when supplied with parameters for a {{mono|leftSubTree}} and {{mono|rightSubTree}}. When such a tree is given a parameter message {{mono|"getLeft"}}, it returns {{mono|leftSubTree}} and likewise when given the message {{mono|"getRight"}} it returns {{mono|rightSubTree}}.
λ(leftSubTree,rightSubTree)
λ(message)
''if'' (message == "getLeft") ''then'' leftSubTree
''else if'' (message == "getRight") ''then'' rightSubTree
However, the semantics of the lambda calculus were expressed using [[mathematical logic|variable substitution]] in which the values of parameters were substituted into the body of an invoked lambda expression. The substitution model is unsuitable for concurrency because it does not allow the capability of [[sharing]] of changing resources. Inspired by the lambda calculus, the [[Interpreter (computing)|interpreter]] for the programming language [[Lisp programming language|Lisp]] made use of a data structure called an environment so that the values of parameters did not have to be substituted into the body of an invoked lambda expression. This allowed for sharing of the [[Side-effect (computer science)|effects]] of updating shared data structures but did not provide for concurrency.
===Simula===
[[SIMULA|Simula 67]] pioneered using message passing for computation, motivated by discrete event simulation applications. These applications had become large and unmodular in previous simulation languages. At each time step, a large central program would have to go through and update the state of each simulation object that changed depending on the state of whichever simulation objects it interacted with on that step. [[Kristen Nygaard]] and [[Ole-Johan Dahl]] developed the idea (first described in an IFIP workshop in 1967) of having [[Method (computer science)|methods]] on each [[Object (computer science)|object]] that would update its own local state based on messages from other objects. In addition they introduced a [[Class (computer science)|class structure]] for objects with [[Inheritance (object-oriented programming)|inheritance]]. Their innovations considerably improved the modularity of programs.
However, Simula used [[coroutine]] control structure instead of true concurrency.
===Smalltalk=== <!-- This section is linked from [[Smalltalk]] -->
[[Alan Kay]] was influenced by message passing in the pattern-directed invocation of [[Planner programming language|Planner]] in developing [[Smalltalk]]-71. Hewitt was intrigued by Smalltalk-71 but was put off by the complexity of communication that included invocations with many fields including ''global'', ''sender'', ''receiver'', ''reply-style'', ''status'', ''reply'', ''operator selector'', ''etc.''
In 1972 Kay visited MIT and discussed some of his ideas for Smalltalk-72 building on the [[Logo programming language|Logo]] work of [[Seymour Papert]] and the [[Little man computer|"little person"]] model of computation used for teaching children to program. However, the message passing of Smalltalk-72 was quite complex. Code in the language was viewed by the interpreter as simply a stream of tokens. As [[Dan Ingalls]] later described it:
:''The first (token) encountered (in a program) was looked up in the dynamic context, to determine the receiver of the subsequent message. The name lookup began with the class dictionary of the current activation. Failing there, it moved to the sender of that activation and so on up the sender chain. When a binding was finally found for the token, its value became the receiver of a new message, and the interpreter activated the code for that object's class.''
Thus the message-passing model in Smalltalk-72 was closely tied to a particular machine model and programming-language syntax that did not lend itself to concurrency. Also, although the system was bootstrapped on itself, the language constructs were not formally defined as objects that respond to '''Eval''' messages (see discussion below). This led some to believe that a new mathematical model of concurrent computation based on message passing should be simpler than Smalltalk-72.
Subsequent versions of the Smalltalk language largely followed the path of using the virtual [[Method (computer science)|methods]] of Simula in the message-passing structure of programs. However Smalltalk-72 made primitives such as integers, floating point numbers, ''etc.'' into [[Object (computer science)|objects]]. The authors of Simula had considered making such primitives into objects but refrained largely for efficiency reasons. [[Java (programming language)|Java]] at first used the expedient of having both primitive and object versions of integers, floating point numbers, ''etc.'' The [[C Sharp (programming language)|C#]] programming language (and later versions of Java, starting with Java 1.5) adopted the less elegant solution of using ''[[Boxing (computer science)|boxing]]'' and ''unboxing'', a variant of which had been used earlier in some [[Lisp programming language|Lisp]] implementations.
The Smalltalk system went on to become very influential, innovating in bitmap displays, personal computing, the class browser interface, and many other ways. For details see Kay's ''The Early History of Smalltalk''.<ref name="kay1996">{{cite journal|last=Kay|first=Alan|authorlink=Alan Kay|title=The Early History of Smalltalk|url=http://www.smalltalk.org/downloads/papers/SmalltalkHistoryHOPL.pdf|journal= ACM SIGPLAN Notices|volume=28|issue=3|date=March 1993|pages=69–75|doi=10.1145/155360.155364|url-status=dead|archiveurl=https://web.archive.org/web/20120205105015/http://www.smalltalk.org/downloads/papers/SmalltalkHistoryHOPL.pdf|archivedate=2012-02-05}}</ref> Meanwhile, the Actor efforts at MIT remained focused on developing the science and engineering of higher level concurrency. (See the paper by Jean-Pierre Briot for ideas that were developed later on how to incorporate some kinds of Actor concurrency into later versions of Smalltalk.)
===Petri nets===
Prior to the development of the Actor model, [[Petri net]]s were widely used to model nondeterministic computation. However, they were widely acknowledged to have an important limitation: they modeled control flow but not data flow. Consequently, they were not readily composable, thereby limiting their modularity. Hewitt pointed out another difficulty with Petri nets: simultaneous action. ''I.e.'', the atomic step of computation in Petri nets is a transition in which tokens ''simultaneously'' disappear from the input places of a transition and appear in the output places. The physical basis of using a primitive with this kind of simultaneity seemed questionable to him. Despite these apparent difficulties, Petri nets continue to be a popular approach to modelling concurrency, and are still the subject of active research.
===Threads, locks, and buffers (channels)===
Prior to the Actor model, concurrency was defined in low-level machine terms of [[Thread (computer science)|threads]], [[Lock (computer science)|locks]] and [[Buffer (computer science)|buffers]]([[Channel (programming)|channels]]). It certainly is the case that implementations of the Actor model typically make use of these hardware capabilities. However, there is no reason that the model could not be implemented directly in hardware without exposing any hardware threads and locks. Also, there is no necessary relationship between the number of Actors, threads, and locks that might be involved in a computation. Implementations of the Actor model are free to make use of threads and locks in any way that is compatible with the laws for Actors.
==Abstracting away implementation details==
An important challenge in defining the Actor model was to abstract away implementation details.
For example, consider the following question:
Another example of abstracting away implementation detail was the question of [[Interpreter (computing)|interpretation]]:
==Operational model==
Nevertheless, progress developing the model was steady.
==Scheme==
[[Gerald Jay Sussman|Gerald Sussman]] and [[Guy L. Steele, Jr.|Guy Steele]] then took an interest in Actors and published a paper on their [[Scheme (programming language)|Scheme]] interpreter in which they
==Laws for Actors==
Line 42 ⟶ 69:
==Specifications and proofs==
Aki Yonezawa published his specification and verification techniques for Actors. Russ Atkinson and [[Carl Hewitt]] published a paper on specification and proof techniques for serializers providing an efficient solution to [[
==Mathematical characterization using ___domain theory==
Finally eight years after the first Actor publication, Will Clinger (building on the work of [[Irene Greif]] 1975
==See also==
* [[Actor model and process calculi history]]
* [[History of denotational semantics]]
* [[Actor model middle history]]
* [[Actor model later history]]
==References==
{{reflist}}
==Bibliography==
*{{Cite book|ref={{harvid|Hewitt et al.|1973}}|first1=Carl | last1=Hewitt |first2=Peter | last2=Bishop |first3=Richard | last3= Steiger|chapter=A Universal Modular Actor Formalism for Artificial Intelligence | title=IJCAI'73: Proceedings of the 3rd [[International Joint Conference on Artificial Intelligence]] | year=1973 | pages=235–245|chapter-url=https://dl.acm.org/doi/10.5555/1624775.1624804|series=<!---->}}
* {{cite journal|last=McCarthy|first=John|title=Situations, actions and causal laws|journal=Technical Report Memo|year=1963|issue=2|publisher=Stanford University Artificial Intelligence Laboratory}}
* {{cite journal|last1=McCarthy|first1=John|title=Some Philosophical Problems from the Standpoint of Artificial Intelligence|journal=Machine Intelligence|year=1969|issue=4|pages=463–502|last2=Hayes|first2=Patrick|publisher=[[Edinburgh University Press]]|citeseerx=10.1.1.85.5082}}
* {{cite book|last=Heisenberg|first=Werner|title=Physics and Beyond: Encounters and Conversations|year=1971|publisher=Harper & Row|___location=New York|pages=63–64|isbn=978-0061316227|others=Translated by A. J. Pomerans|url-access=registration|url=https://archive.org/details/physicsbeyondenc00heis}}
* {{cite book|last1=Hewitt|first1=Carl|date=January 1974|doi=10.1145/512927.512942|last2=Bishop|first2=Peter|last3=Greif|first3=Irene|last4=Smith|first4=Brian|last5=Matson|first5=Todd|last6=Steiger|first6=Richard|title=Proceedings of the 1st annual ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages – POPL '73 |chapter=Actor induction and meta-evaluation |pages=153–168|citeseerx=10.1.1.104.295|s2cid=33611569 }}
* {{cite journal|last=Hewitt|first=Carl|title=Behavioral Semantics of Nonrecursive Control Structure|journal=Proceedings of Colloque Sur la Programmation|date=April 1974|url=http://dl.acm.org/citation.cfm?id=721498|pages=385–407|isbn=9783540068594}}
* {{cite book|last1=Greif|first1=Irene|last2=Hewitt|first2=Carl|title=Proceedings of the 2nd ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages – POPL '75 |chapter=Actor semantics of PLANNER-73 |date=January 1975|doi=10.1145/512976.512984|pages=67–77|s2cid=18178340 }}
* {{cite journal|last=Hewitt|first=Carl|title=How to Use What You Know|journal=Proceedings of the 4th International Joint Conference on Artificial Intelligence|volume=1|date=September 1975|pages=189–198}}
* {{Cite thesis |type=Ph.D. |title=Semantics of Communicating Parallel Professes |last=Greif |first=Irene |year= 1975 |publisher=[[MIT]] [[Computer engineering|EECS]]}}
* {{cite journal|last1=Baker|first1=Henry|last2=Hewitt|first2=Carl|title=The Incremental Garbage Collection of Processes|journal=Proceedings of the Symposium on Artificial Intelligence Programming Languages|date=August 1977|pages=55–59 |doi=10.1145/800228.806932 |hdl=1721.1/41969 |s2cid=1557419 |url=http://www.ncstrl.org:8900/ncstrl/servlet/search?formname=detail\&id=oai%3Ancstrlh%3Amitai%3AMIT-AILab%2F%2FAIM-454|hdl-access=free}}{{Dead link|date=January 2020 |bot=InternetArchiveBot |fix-attempted=yes }}
* {{cite journal|last2=Baker|first2=Henry|last1=Hewitt|first1=Carl|title=Laws for Communicating Parallel Processes|journal=International Federation for Information Processing|date=August 1977|hdl=1721.1/41962}}
* {{Cite thesis |type=Ph.D. |title=Specification and Verification Techniques for Parallel Programs Based on Message Passing Semantics |last=Yonezawa |first=Aki |year= 1977 |publisher=[[MIT]] [[Computer engineering|EECS]]}}
* {{Cite thesis |type=Ph.D. |title=Very Large Address Space Modularly Extensible Computer Systems |last=Bishop |first=Peter |year= 1977 |publisher=[[MIT]] [[Computer engineering|EECS]]}}
* {{cite journal|last=Hewitt|first=Carl|title=Viewing Control Structures as Patterns of Passing Messages|journal=Journal of Artificial Intelligence|date=June 1977|volume=8 |issue=3 |pages=323–364 |doi=10.1016/0004-3702(77)90033-9 |hdl=1721.1/6272|hdl-access=free}}
* {{Cite thesis |type=Ph.D. |title=Actor Systems for Real-Time Computation |last=Baker |first=Henry |year= 1978 |publisher=[[MIT]] [[Computer engineering|EECS]]}}
* {{cite journal|last1=Hewitt|first1=Carl|last2=Atkinson|first2=Russ|title=Specification and Proof Techniques for Serializers|journal= IEEE Transactions on Software Engineering|date=January 1979|doi=10.1109/TSE.1979.234149|pages=10–23|hdl=1721.1/5756|s2cid=15272353 |hdl-access=free}}
* {{Cite thesis |type=Ph.D. |title=A Computational Theory of Animation |last=Kahn |first=Ken |year= 1979 |publisher=[[MIT]] [[Computer engineering|EECS]]}}
* {{cite journal|last1=Hewitt|first1=Carl|last2=Attardi|first2=Beppe|last3=Lieberman|first3=Henry|title=Delegation in Message Passing|journal=Proceedings of First International Conference on Distributed Systems|date=October 1979|___location=Huntsville, AL}}
* {{Cite thesis |type=Ph.D. |title=Automatic Verification of Serializers |last=Atkinson |first=Russ |year= 1980 |publisher=[[MIT]]}}
* {{cite journal|last1=Kornfeld|first1=Bill|last2=Hewitt|first2=Carl|title=The Scientific Community Metaphor|journal=IEEE Transactions on Systems, Man, and Cybernetics|date=January 1981|doi=10.1109/TSMC.1981.4308575|volume=11|pages=24–33|url=https://dspace.mit.edu/bitstream/1721.1/5693/2/AIM-641.pdf|hdl=1721.1/5693|s2cid=1322857 |hdl-access=free}}
* {{cite journal|last=Lieberman|first=Henry|title=Thinking About Lots of Things at Once without Getting Confused: Parallelism in Act 1|journal=MIT AI Memo|issue=626|date=May 1981|hdl=1721.1/6351}}
* {{cite journal|last=Lieberman|first=Henry|title=A Preview of Act 1|journal=MIT AI Memo|issue=625|date=June 1981|hdl=1721.1/6350}}
* {{Cite thesis |type=Ph.D. |title=Reasoning about Change in Knowledgeable Office Systems |last=Barber |first=Gerry |year= 1981 |publisher=[[MIT]] [[Computer engineering|EECS]]}}
* {{Cite thesis |type=Ph.D. |title=Parallelism in Problem Solving |last=Kornfeld |first=Bill |year= 1981 |publisher=[[MIT]] [[Computer engineering|EECS]]}}
* {{Cite thesis |type=Ph.D. |title=Foundations of Actor Semantics |last=Clinger |first=Will |year= 1981 |publisher=[[MIT]] [[Mathematics]]}}
*{{cite journal|last=Theriault|first=Daniel|title=A Primer for the Act-1 Language|journal=MIT AI Memo|issue=672|date=April 1982|hdl=1721.1/5675}}
* {{cite journal|last1=Lieberman|first1=Henry|last2=Hewitt|first2=Carl|title=A real Time Garbage Collector Based on the Lifetimes of Objects|journal=Communications of the ACM|date=June 1983|doi=10.1145/358141.358147|volume=26|issue=6|pages=419|citeseerx=10.1.1.123.5055|s2cid=14161480 }}
* {{cite journal|last=Theriault|first=Daniel|title=Issues in the Design and Implementation of Act 2|journal=MIT AI Technical Report|issue=728|date=June 1983|hdl=1721.1/6940}}
* {{cite journal|last=Lieberman|first=Henry|title=An Object-Oriented Simulator for the Apiary|journal=Conference of the American Association for Artificial Intelligence|date=August 1983|___location=Washington, D. C.|url=http://www.aaai.org/Papers/AAAI/1983/AAAI83-090.pdf}}
* {{cite journal|last1=Hewitt|first1=Carl|last2=de Jong|first2=Peter|title=Analyzing the Roles of Descriptions and Actions in Open Systems|journal=Proceedings of the National Conference on Artificial Intelligence|date=August 1983|hdl=1721.1/5649}}
* {{cite book|last=Jammer|first=M.|title=Symposium on the Foundations of Modern Physics: 50 years of the Einstein-Podolsky-Rosen Gedanken experiment|year=1985|publisher=World Scientific|___location=Singapore|pages=129–149|editor=P. Lahti, P. Mittelstaedt|chapter=The EPR Problem in Its Historical Development}}
* {{cite book|last=Fine|first=A.|title=The Shaky Game: Einstein Realism and the Quantum Theory|year=1986|publisher=University of Chicago Press|___location=Chicago|isbn=978-0226249476}}
* {{cite journal|last1=Hewitt|first1=Carl|last2=Lieberman|first2=Henry|title=Design Issues in Parallel Architecture for Artificial Intelligence|journal=MIT AI Memo|issue=750|date=November 1983|hdl=1721.1/5653}}
* {{cite book|last=Fuchs|first=Christopher|title=Quantum Theory: Reconstruction of Foundations|year=2002|publisher= Växjo University Press|___location=Växjo|editor=A. Khrenikov|chapter=Quantum mechanics as quantum information (and only a little more)}}
* {{cite web|last=Hewitt|first=Carl|title=What is Commitment? Physical, Organizational, and Social|date=April 27, 2006|url=http://www.pcs.usp.br/~coin-aamas06/10_commitment-43_16pages.pdf|work=COIN@AAMAS}}
[[Category:Actor model (computer science)]]
[[Category:History of computing|Actor model]]
[[Category:History of software|Actor model]]
|