<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=Actor_model_implementation</id>
	<title>Actor model implementation - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=Actor_model_implementation"/>
	<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Actor_model_implementation&amp;action=history"/>
	<updated>2026-05-04T20:02:16Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>http://debianws.lexgopc.com/wiki143/index.php?title=Actor_model_implementation&amp;diff=1563169&amp;oldid=prev</id>
		<title>imported&gt;Zyploc: The term &#039;actor&#039; is not a proper noun and is not capitalized in the body of corresponding pages, e.g. Actor model.</title>
		<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Actor_model_implementation&amp;diff=1563169&amp;oldid=prev"/>
		<updated>2025-06-09T07:46:59Z</updated>

		<summary type="html">&lt;p&gt;The term &amp;#039;actor&amp;#039; is not a proper noun and is not capitalized in the body of corresponding pages, e.g. &lt;a href=&quot;/wiki143/index.php?title=Actor_model&quot; title=&quot;Actor model&quot;&gt;Actor model&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Short description|In computer science}}&lt;br /&gt;
{{No footnotes|date=August 2023}}&lt;br /&gt;
{{Copied to Wikibooks}}&lt;br /&gt;
&lt;br /&gt;
In [[computer science]], &amp;#039;&amp;#039;&amp;#039;actor model implementation&amp;#039;&amp;#039;&amp;#039; concerns implementation issues for the [[actor model]].&lt;br /&gt;
&lt;br /&gt;
==Cosmic Cube==&lt;br /&gt;
The [[Caltech Cosmic Cube]] was developed by Chuck Seitz &amp;#039;&amp;#039;et al.&amp;#039;&amp;#039; at Caltech providing architectural support for actor systems.  A significant difference between the Cosmic Cube and&lt;br /&gt;
most other parallel processors is that this multiple instruction&lt;br /&gt;
multiple-data machine uses message passing&lt;br /&gt;
instead of shared variables for communication between&lt;br /&gt;
concurrent processes. This computational model is reflected&lt;br /&gt;
in the hardware structure and operating system,&lt;br /&gt;
and is also the explicit message passing communication seen by the programmer.  According to Seitz [1985]:&lt;br /&gt;
&lt;br /&gt;
:It was a premise of the Cosmic Cube experiment that the internode communication should scale well to very large numbers of nodes. A &amp;#039;&amp;#039;direct&amp;#039;&amp;#039; network like the hypercube satisfies this requirement, with respect to both the aggregate bandwidth achieved across the many concurrent communication channels and the feasibility of the implementation. The [[hypercube]] is actually a distributed variant of an &amp;#039;&amp;#039;indirect&amp;#039;&amp;#039; logarithmic switching network like the Omega or [[banyan switch|banyan]] networks: the kind that might be used in shared-storage organizations. With the hypercube, however, communication paths traverse different numbers of channels and so exhibit different latencies. It is possible, therefore, to take advantage of communication locality in placing processes in nodes.&lt;br /&gt;
&lt;br /&gt;
==J–Machine==&lt;br /&gt;
The [[J–Machine]] was developed by [[Bill Dally]] &amp;#039;&amp;#039;et al.&amp;#039;&amp;#039; at MIT providing architectural support suitable for actors.&lt;br /&gt;
This included the following:&lt;br /&gt;
*Asynchronous messaging&lt;br /&gt;
*A uniform space of actor addresses to which messages could be sent concurrently regardless of whether the recipient actor was local or nonlocal&lt;br /&gt;
*A form of actor pipelining (see [[actor model]])&lt;br /&gt;
Concurrent Smalltalk (which can be modeled using [[actor model|actors]]) was developed to program the J Machine.&lt;br /&gt;
&lt;br /&gt;
==Prototype actor programming language==&lt;br /&gt;
Hewitt [2006] presented a prototype actor programming language in the sense that it directly expresses important aspects of the behavior of actors.&lt;br /&gt;
Messages are expressed in XML using the notation&lt;br /&gt;
&amp;lt;kbd&amp;gt;:&amp;amp;lt;tag&amp;amp;gt;[&amp;amp;lt;element&amp;amp;gt;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; ... &amp;amp;lt;element&amp;amp;gt;] for&amp;lt;/kbd&amp;gt;&lt;br /&gt;
:&amp;lt;kbd&amp;gt;“&amp;amp;lt;”&amp;amp;lt;tag&amp;amp;gt;“&amp;amp;gt;” &amp;amp;lt;element&amp;amp;gt;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; ... &amp;amp;lt;element&amp;amp;gt;&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt; “&amp;amp;lt;”/&amp;amp;lt;tag&amp;amp;gt;“&amp;amp;gt;”&amp;lt;/kbd&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The semantics of the programming language are defined by defining each program construct as an actor with its own behavior.  Execution is modeled by having Eval messages passed among program constructs during execution.&lt;br /&gt;
&lt;br /&gt;
===Environment actors===&lt;br /&gt;
Each &amp;lt;kbd&amp;gt;Eval&amp;lt;/kbd&amp;gt; message has the address of an actor that acts as an environment with the bindings of program identifiers.  Environment actors are immutable, i.e., they do not change.&lt;br /&gt;
When &amp;lt;kbd&amp;gt;Request[Bind[identifier value] customer]&amp;lt;/kbd&amp;gt; is received by an actor environment, a new environment actor is created such that&lt;br /&gt;
when the new environment actor receives&lt;br /&gt;
&amp;lt;kbd&amp;gt;Request[Lookup[identifier’] customer’]&amp;lt;/kbd&amp;gt; then if &amp;lt;kbd&amp;gt;identifier&amp;lt;/kbd&amp;gt; is the same as &amp;lt;kbd&amp;gt;identifier’&amp;lt;/kbd&amp;gt; send &amp;lt;kbd&amp;gt;customer’&amp;lt;/kbd&amp;gt; &amp;lt;kbd&amp;gt;Returned[value]&amp;lt;/kbd&amp;gt;, else send &amp;lt;kbd&amp;gt;Environment&lt;br /&gt;
Request[Lookup[identifier’] customer’]&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
The above builds on an actor &amp;lt;kbd&amp;gt;EmptyEnvironment&amp;lt;/kbd&amp;gt; which&lt;br /&gt;
when it receives &amp;lt;kbd&amp;gt;Request[Lookup[identifier] customer]&amp;lt;/kbd&amp;gt;, sends &amp;lt;kbd&amp;gt;customer&amp;lt;/kbd&amp;gt; &amp;lt;kbd&amp;gt;Thrown[NotFound[identifier]]&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
When it receives a &amp;lt;kbd&amp;gt;Bind&amp;lt;/kbd&amp;gt; request &amp;lt;kbd&amp;gt;EmptyEnvironment&amp;lt;/kbd&amp;gt; acts like &amp;lt;kbd&amp;gt;Environment&amp;lt;/kbd&amp;gt; above.&lt;br /&gt;
&lt;br /&gt;
===Expressions===&lt;br /&gt;
The prototype programming language has expressions of the following kinds:&lt;br /&gt;
&lt;br /&gt;
; &amp;amp;lt;identifier&amp;amp;gt;&lt;br /&gt;
:When &amp;lt;kbd&amp;gt;Request[Eval[environment] customer]&amp;lt;/kbd&amp;gt; is received, send &amp;lt;kbd&amp;gt;environment&amp;lt;/kbd&amp;gt; &amp;lt;kbd&amp;gt;Request[Lookup[&amp;amp;lt;identifier&amp;amp;gt;] customer]&amp;lt;/kbd&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;#039;&amp;#039;send&amp;#039;&amp;#039; &amp;amp;lt;recipient&amp;amp;gt; &amp;amp;lt;communication&amp;amp;gt;&lt;br /&gt;
:When &amp;lt;kbd&amp;gt;Request[Eval[environment] customer]&amp;lt;/kbd&amp;gt; is received, send &amp;lt;kbd&amp;gt;&amp;amp;lt;recipient&amp;amp;gt;&amp;lt;/kbd&amp;gt; &amp;lt;kbd&amp;gt;Request[Eval[environment] evalCustomer&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;]&amp;lt;/kbd&amp;gt; where &amp;lt;kbd&amp;gt;evalCustomer&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/kbd&amp;gt;  is a new actor such that&lt;br /&gt;
:when &amp;lt;kbd&amp;gt;evalCustomer&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/kbd&amp;gt; receives the communication &amp;lt;kbd&amp;gt;Returned[theRecipient]&amp;lt;/kbd&amp;gt;, then send &amp;lt;kbd&amp;gt;&amp;amp;lt;communication&amp;amp;gt;&amp;lt;/kbd&amp;gt;&lt;br /&gt;
:&amp;lt;kbd&amp;gt;Request[Eval[environment] evalCustomer&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;]&amp;lt;/kbd&amp;gt; where &amp;lt;kbd&amp;gt;evalCustomer&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/kbd&amp;gt; is a new actor such that&lt;br /&gt;
:when &amp;lt;kbd&amp;gt;evalCustomer&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/kbd&amp;gt; receives the communication &amp;lt;kbd&amp;gt;Returned[theCommunication]&amp;lt;/kbd&amp;gt;, then send &amp;lt;kbd&amp;gt;theRecipient&amp;lt;/kbd&amp;gt; &amp;lt;kbd&amp;gt;theCommunication&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;&amp;amp;lt;recipient&amp;amp;gt;.&amp;amp;lt;message&amp;amp;gt;&lt;br /&gt;
:When &amp;lt;kbd&amp;gt;Request[Eval[environment] customer]&amp;lt;/kbd&amp;gt; is received, send &amp;lt;kbd&amp;gt;&amp;amp;lt;recipient&amp;amp;gt;&amp;lt;/kbd&amp;gt; &amp;lt;kbd&amp;gt;Request[Eval[environment] evalCustomer&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;]&amp;lt;/kbd&amp;gt; such that&lt;br /&gt;
:when &amp;lt;kbd&amp;gt;evalCustomer&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/kbd&amp;gt;  receives the communication &amp;lt;kbd&amp;gt;Returned[theRecipient]&amp;lt;/kbd&amp;gt;,  then send &amp;lt;kbd&amp;gt;&amp;amp;lt;message&amp;amp;gt;&amp;lt;/kbd&amp;gt; &amp;lt;kbd&amp;gt;Request[Eval[environment] evalCustomer&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;]&amp;lt;/kbd&amp;gt; such that&lt;br /&gt;
:when &amp;lt;kbd&amp;gt;evalCustomer&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/kbd&amp;gt; receives the communication &amp;lt;kbd&amp;gt;Returned[theMessage]&amp;lt;/kbd&amp;gt;, then send &amp;lt;kbd&amp;gt;theRecipient&amp;lt;/kbd&amp;gt;&lt;br /&gt;
:&amp;lt;kbd&amp;gt;Request[theMessage customer]&amp;lt;/kbd&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&amp;#039;&amp;#039;receiver&amp;#039;&amp;#039; ... &amp;amp;lt;pattern&amp;amp;gt;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; &amp;amp;lt;expression&amp;amp;gt;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; ...&lt;br /&gt;
:When &amp;lt;kbd&amp;gt;Request[Eval[environment] customer]&amp;lt;/kbd&amp;gt; is received, send &amp;lt;kbd&amp;gt;customer&amp;lt;/kbd&amp;gt; a new actor &amp;lt;kbd&amp;gt;theReceiver&amp;lt;/kbd&amp;gt; such that &lt;br /&gt;
:when &amp;lt;kbd&amp;gt;theReceiver&amp;lt;/kbd&amp;gt; receives a communication &amp;lt;kbd&amp;gt;com&amp;lt;/kbd&amp;gt;, then create a new &amp;lt;kbd&amp;gt;bindingCustomer&amp;lt;/kbd&amp;gt; and send environment&lt;br /&gt;
:&amp;lt;kbd&amp;gt;Request[Bind[&amp;amp;lt;pattern&amp;amp;gt;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; com] bindingCustomer]&amp;lt;/kbd&amp;gt; and&lt;br /&gt;
:if &amp;lt;kbd&amp;gt;bindingCustomer&amp;lt;/kbd&amp;gt; receives &amp;lt;kbd&amp;gt;Returned[environment’]&amp;lt;/kbd&amp;gt;, send &amp;lt;kbd&amp;gt;&amp;amp;lt;expression&amp;amp;gt;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;lt;/kbd&amp;gt;&lt;br /&gt;
:&amp;lt;kbd&amp;gt;Request[Eval[environment’]]&amp;lt;/kbd&amp;gt;&lt;br /&gt;
:otherwise if &amp;lt;kbd&amp;gt;bindingCustomer&amp;lt;/kbd&amp;gt; receives &amp;lt;kbd&amp;gt;Thrown[...]&amp;lt;/kbd&amp;gt;, try &amp;lt;kbd&amp;gt;&amp;amp;lt;pattern&amp;amp;gt;&amp;lt;sub&amp;gt;i+1&amp;lt;/sub&amp;gt;&amp;lt;/kbd&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;#039;&amp;#039;behavior&amp;#039;&amp;#039; ... &amp;amp;lt;pattern&amp;amp;gt;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; &amp;amp;lt;expression&amp;amp;gt;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; ...&lt;br /&gt;
:When &amp;lt;kbd&amp;gt;Request[Eval[environment] customer]&amp;lt;/kbd&amp;gt; is received, send customer a new actor &amp;lt;kbd&amp;gt;theReceiver&amp;lt;/kbd&amp;gt; such that &lt;br /&gt;
:when &amp;lt;kbd&amp;gt;theReceiver&amp;lt;/kbd&amp;gt; receives &amp;lt;kbd&amp;gt;Request[message customer’]&amp;lt;/kbd&amp;gt;, then create a new &amp;lt;kbd&amp;gt;bindingCustomer&amp;lt;/kbd&amp;gt; and send &amp;lt;kbd&amp;gt;environment&amp;lt;/kbd&amp;gt;&lt;br /&gt;
:&amp;lt;kbd&amp;gt;Request[bind[&amp;amp;lt;pattern&amp;amp;gt;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; message] customer’]&amp;lt;/kbd&amp;gt; and&lt;br /&gt;
:# if &amp;lt;kbd&amp;gt;bindingCustomer&amp;lt;/kbd&amp;gt; receives &amp;lt;kbd&amp;gt;Returned[environment’]&amp;lt;/kbd&amp;gt;, send &amp;lt;kbd&amp;gt;&amp;amp;lt;expression&amp;amp;gt;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;lt;/kbd&amp;gt;&lt;br /&gt;
:#:&amp;lt;kbd&amp;gt;Request[Eval[environment’] customer’]&amp;lt;/kbd&amp;gt;&lt;br /&gt;
:# otherwise if &amp;lt;kbd&amp;gt;bindingCustomer&amp;lt;/kbd&amp;gt; receives &amp;lt;kbd&amp;gt;Thrown[...]&amp;lt;/kbd&amp;gt;, try &amp;lt;kbd&amp;gt;&amp;amp;lt;pattern&amp;amp;gt;&amp;lt;sub&amp;gt;i+1&amp;lt;/sub&amp;gt;&amp;lt;/kbd&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;{&amp;amp;lt;expression&amp;amp;gt;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, &amp;amp;lt;expression&amp;amp;gt;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;}&lt;br /&gt;
:When &amp;lt;kbd&amp;gt;Request[Eval[environment] customer]&amp;lt;/kbd&amp;gt; is received, send &amp;lt;kbd&amp;gt;&amp;amp;lt;expression&amp;amp;gt;&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/kbd&amp;gt; &amp;lt;kbd&amp;gt;Request[Eval[environment]]&amp;lt;/kbd&amp;gt; and concurrently send &amp;lt;kbd&amp;gt;&amp;amp;lt;expression&amp;amp;gt;&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/kbd&amp;gt; &amp;lt;kbd&amp;gt;Request[Eval[environment]] customer]&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
; &amp;#039;&amp;#039;let&amp;#039;&amp;#039; &amp;amp;lt;identifier&amp;amp;gt; = &amp;amp;lt;expression&amp;amp;gt;&amp;lt;sub&amp;gt;value&amp;lt;/sub&amp;gt; &amp;#039;&amp;#039;in&amp;#039;&amp;#039; &amp;amp;lt;expression&amp;amp;gt;&amp;lt;sub&amp;gt;body&amp;lt;/sub&amp;gt;&lt;br /&gt;
:When &amp;lt;kbd&amp;gt;message[Eval[environment] customer]&amp;lt;/kbd&amp;gt; is received, then create a new &amp;lt;kbd&amp;gt;evalCustomer&amp;lt;/kbd&amp;gt; and send &amp;lt;kbd&amp;gt;&amp;amp;lt;expression&amp;amp;gt;&amp;lt;sub&amp;gt;value&amp;lt;/sub&amp;gt;&amp;lt;/kbd&amp;gt;&lt;br /&gt;
:&amp;lt;kbd&amp;gt;Request[Eval[environment] evalCustomer&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
:When &amp;lt;kbd&amp;gt;evalCustomer&amp;lt;/kbd&amp;gt; receives &amp;lt;kbd&amp;gt;Returned[theValue]&amp;lt;/kbd&amp;gt;, create a new &amp;lt;kbd&amp;gt;bindingCustomer&amp;lt;/kbd&amp;gt; and send &amp;lt;kbd&amp;gt;environment&amp;lt;/kbd&amp;gt;&lt;br /&gt;
:&amp;lt;kbd&amp;gt;Request[bind[&amp;amp;lt;identifier&amp;amp;gt; theValue] bindingCustomer]&amp;lt;/kbd&amp;gt;&lt;br /&gt;
:When &amp;lt;kbd&amp;gt;bindingCustomer&amp;lt;/kbd&amp;gt; receives &amp;lt;kbd&amp;gt;Returned[environment’]&amp;lt;/kbd&amp;gt;, send &amp;lt;kbd&amp;gt;&amp;amp;lt;expression&amp;amp;gt;&amp;lt;sub&amp;gt;body&amp;lt;/sub&amp;gt;&amp;lt;/kbd&amp;gt; &amp;lt;kbd&amp;gt;Request[Eval[environment’] customer]&amp;lt;/kbd&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;#039;&amp;#039;serializer&amp;#039;&amp;#039; &amp;amp;lt;expression&amp;amp;gt;&lt;br /&gt;
:When &amp;lt;kbd&amp;gt;Request[Eval[environment] customer]&amp;lt;/kbd&amp;gt; is received, then send &amp;lt;kbd&amp;gt;customer&amp;lt;/kbd&amp;gt; &amp;lt;kbd&amp;gt;Returned[theSerializer]&amp;lt;/kbd&amp;gt; where &amp;lt;kbd&amp;gt;theSerializer&amp;lt;/kbd&amp;gt; is a new actor such that communications sent to &amp;lt;kbd&amp;gt;theSerializer&amp;lt;/kbd&amp;gt; are processed in FIFO order with a behavior actor that is initially &amp;lt;kbd&amp;gt;&amp;amp;lt;expression&amp;amp;gt;.Eval[environment]&amp;lt;/kbd&amp;gt; and&lt;br /&gt;
:When communication &amp;lt;kbd&amp;gt;com&amp;lt;/kbd&amp;gt; is received by &amp;lt;kbd&amp;gt;theSerializer&amp;lt;/kbd&amp;gt;, then send the behavior actor &amp;lt;kbd&amp;gt;Request[com customer’]&amp;lt;/kbd&amp;gt; where &amp;lt;kbd&amp;gt;customer’&amp;lt;/kbd&amp;gt; is a new actor such that&lt;br /&gt;
:when &amp;lt;kbd&amp;gt;customer’&amp;lt;/kbd&amp;gt; receives &amp;lt;kbd&amp;gt;Returned[theNextBehavior]&amp;lt;/kbd&amp;gt; then &amp;lt;kbd&amp;gt;theNextBehavior&amp;lt;/kbd&amp;gt; is used as the behavior actor for the next communication received by &amp;lt;kbd&amp;gt;theSerializer&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Example program===&lt;br /&gt;
An example program for a simple storage cell that can contain any actor address is as follows:&lt;br /&gt;
&lt;br /&gt;
: Cell ≡&lt;br /&gt;
:: &amp;#039;&amp;#039;receiver&amp;#039;&amp;#039;&lt;br /&gt;
::: Request[Create[initial] customer]&lt;br /&gt;
:::: &amp;#039;&amp;#039;send&amp;#039;&amp;#039; customer Returned[&amp;#039;&amp;#039;serializer&amp;#039;&amp;#039; ReadWrite(initial)]&lt;br /&gt;
The above program which creates a storage cell makes use of the behavior ReadWrite which is defined as follows:&lt;br /&gt;
&lt;br /&gt;
: ReadWrite(contents) ≡&lt;br /&gt;
:: &amp;#039;&amp;#039;behavior&amp;#039;&amp;#039;&lt;br /&gt;
::: Request[read[] customer]&lt;br /&gt;
:::: {&amp;#039;&amp;#039;send&amp;#039;&amp;#039; customer Returned[contents], ReadWrite(contents)}&lt;br /&gt;
::: Request[write[x] customer]&lt;br /&gt;
:::: {&amp;#039;&amp;#039;send&amp;#039;&amp;#039; customer Returned[], ReadWrite(x)}&lt;br /&gt;
&lt;br /&gt;
The above behavior is pipelined, i.e., the behavior might still be processing a previous read or write message while it is processing a subsequent read or write message..&lt;br /&gt;
For example, the following expression creates a cell x with initial contents 5 and then concurrently writes to it with the values 7 and 9.&lt;br /&gt;
&lt;br /&gt;
:&amp;#039;&amp;#039;let&amp;#039;&amp;#039; x = Cell.Create[5] &amp;#039;&amp;#039;in&amp;#039;&amp;#039; {x.write[7], x.write[9], x.read[]}&lt;br /&gt;
&lt;br /&gt;
The value of the above expression is 5, 7 or 9.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[actor model and process calculi]]&lt;br /&gt;
* [[actor model theory]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*[[Henry Baker (computer scientist)|Henry Baker]] and Carl Hewitt &amp;#039;&amp;#039;&amp;#039;The Incremental Garbage Collection of Processes&amp;#039;&amp;#039;&amp;#039; Proceedings of the Symposium on Artificial Intelligence Programming Languages. SIGPLAN Notices 12, August 1977.&lt;br /&gt;
*Peter Bishop &amp;#039;&amp;#039;&amp;#039;Very Large Address Space Modularly Extensible Computer Systems&amp;#039;&amp;#039;&amp;#039; MIT EECS Doctoral Dissertation. June 1977.&lt;br /&gt;
*Henry Baker. &amp;#039;&amp;#039;&amp;#039;Actor Systems for Real-Time Computation&amp;#039;&amp;#039;&amp;#039; MIT EECS Doctoral Dissertation. January 1978.&lt;br /&gt;
*Carl Hewitt and Russ Atkinson.  &amp;#039;&amp;#039;&amp;#039;Specification and Proof Techniques for Serializers&amp;#039;&amp;#039;&amp;#039; IEEE Journal on Software Engineering. January 1979.&lt;br /&gt;
*Ken Kahn. &amp;#039;&amp;#039;&amp;#039;A Computational Theory of Animation&amp;#039;&amp;#039;&amp;#039; MIT EECS Doctoral Dissertation. August 1979.&lt;br /&gt;
*Carl Hewitt, Beppe Attardi, and Henry Lieberman.  &amp;#039;&amp;#039;&amp;#039;Delegation in Message Passing&amp;#039;&amp;#039;&amp;#039; Proceedings of First International Conference on Distributed Systems Huntsville, AL. October 1979.&lt;br /&gt;
*Bill Kornfeld and Carl Hewitt.  &amp;#039;&amp;#039;&amp;#039;The Scientific Community Metaphor&amp;#039;&amp;#039;&amp;#039; IEEE Transactions on Systems, Man, and Cybernetics.  January 1981.&lt;br /&gt;
*Henry Lieberman. &amp;#039;&amp;#039;&amp;#039;Thinking About Lots of Things at Once without Getting Confused: Parallelism in Act 1&amp;#039;&amp;#039;&amp;#039; MIT AI memo 626.  May 1981.&lt;br /&gt;
*Henry Lieberman. &amp;#039;&amp;#039;&amp;#039;A Preview of Act 1&amp;#039;&amp;#039;&amp;#039; MIT AI memo 625.  June 1981.&lt;br /&gt;
*Bill Kornfeld.  &amp;#039;&amp;#039;&amp;#039;Parallelism in Problem Solving&amp;#039;&amp;#039;&amp;#039; MIT EECS Doctoral Dissertation. August 1981.&lt;br /&gt;
*Daniel Theriault.  &amp;#039;&amp;#039;&amp;#039;A Primer for the Act-1 Language&amp;#039;&amp;#039;&amp;#039;  MIT AI memo 672. April 1982.&lt;br /&gt;
*Henry Lieberman and Carl Hewitt.  &amp;#039;&amp;#039;&amp;#039;A real Time Garbage Collector Based on the Lifetimes of Objects&amp;#039;&amp;#039;&amp;#039; CACM June 1983.&lt;br /&gt;
*Daniel Theriault.  &amp;#039;&amp;#039;&amp;#039;Issues in the Design and Implementation of Act 2&amp;#039;&amp;#039;&amp;#039;  MIT AI technical report 728. June 1983.&lt;br /&gt;
*Henry Lieberman.  &amp;#039;&amp;#039;&amp;#039;An Object-Oriented Simulator for the Apiary&amp;#039;&amp;#039;&amp;#039; Conference of the American Association for Artificial Intelligence, Washington, D. C., August 1983.&lt;br /&gt;
*Carl Hewitt and Henry Lieberman.  &amp;#039;&amp;#039;&amp;#039;Design Issues in Parallel Architecture for Artificial Intelligence&amp;#039;&amp;#039;&amp;#039; MIT AI memo 750.  Nov. 1983.&lt;br /&gt;
*Charles Seitz. &amp;#039;&amp;#039;&amp;#039;The Cosmic Cube&amp;#039;&amp;#039;&amp;#039; CACM. Jan. 1985.&lt;br /&gt;
*Carl Manning. &amp;#039;&amp;#039;&amp;#039;Traveler: the actor observatory&amp;#039;&amp;#039;&amp;#039; ECOOP 1987. Also appears in Lecture Notes in Computer Science, vol. 276.&lt;br /&gt;
*Carl Manning,.  &amp;#039;&amp;#039;&amp;#039;Acore: The Design of a Core Actor Language and its Compile&amp;#039;&amp;#039;&amp;#039; MastersThesis. MIT EECS. May 1987.&lt;br /&gt;
*William Athas and Charles Seitz &amp;#039;&amp;#039;&amp;#039;Multicomputers:  message-passing concurrent computers&amp;#039;&amp;#039;&amp;#039; IEEE Computer August 1988.&lt;br /&gt;
*William Athas and Nanette Boden &amp;#039;&amp;#039;&amp;#039;Cantor: An actor Programming System for Scientific Computing&amp;#039;&amp;#039;&amp;#039; in Proceedings of the NSF Workshop on Object-Based Concurrent Programming.  1988.  Special Issue of SIGPLAN Notices.&lt;br /&gt;
*Jean-Pierre Briot.  &amp;#039;&amp;#039;&amp;#039;From objects to actors: Study of a limited symbiosis in Smalltalk-80&amp;#039;&amp;#039;&amp;#039; Rapport de Recherche 88-58, RXF-LITP, Paris, France, September 1988&lt;br /&gt;
*William Dally and Wills, D. &amp;#039;&amp;#039;&amp;#039;Universal mechanisms for concurrency&amp;#039;&amp;#039;&amp;#039; PARLE ‘89.&lt;br /&gt;
*W. Horwat, A. Chien, and W. Dally. &amp;#039;&amp;#039;&amp;#039;Experience with CST:  Programming and Implementation&amp;#039;&amp;#039;&amp;#039; PLDI. 1989.&lt;br /&gt;
*[[Akinori Yonezawa]], Ed. &amp;#039;&amp;#039;&amp;#039;ABCL: An Object-Oriented Concurrent System&amp;#039;&amp;#039;&amp;#039; MIT Press. 1990.&lt;br /&gt;
*Carl Hewitt and Gul Agha.  &amp;#039;&amp;#039;&amp;#039;Guarded Horn clause languages: are they deductive and Logical?&amp;#039;&amp;#039;&amp;#039; in Artificial Intelligence at MIT, Vol. 2. MIT Press 1991.&lt;br /&gt;
*Carl Hewitt and Jeff Inman.  &amp;#039;&amp;#039;&amp;#039;DAI Betwixt and Between:  From &amp;quot;Intelligent Agents&amp;quot; to Open Systems Science&amp;#039;&amp;#039;&amp;#039; IEEE Transactions on Systems, Man, and Cybernetics.  Nov./Dec. 1991.&lt;br /&gt;
*William Dally, &amp;#039;&amp;#039;et al.&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;The Message-Driven Processor: A Multicomputer Processing Node with Efficient Mechanisms&amp;#039;&amp;#039;&amp;#039; IEEE Micro. April 1992.&lt;br /&gt;
*Don Box, David Ehnebuske, Gopal Kakivaya, Andrew Layman, Noah Mendelsohn, Henrik Nielsen, Satish Thatte, Dave Winer. &amp;#039;&amp;#039;&amp;#039;Simple Object Access Protocol (SOAP) 1.1&amp;#039;&amp;#039;&amp;#039; W3C Note. May 2000.&lt;br /&gt;
*{{cite document | author = Edward A. Lee and Stephen Neuendorffer | title = Classes and Subclasses in Actor-Oriented Design | doi = &amp;lt;!-- 10.1.1.9.6762 --&amp;gt; | type = Ph.D. Dissertation - extended abstract | publisher = Conference on Formal Methods and Models for Codesign (MEMOCODE) | date = June 2004 }}&lt;br /&gt;
*Carl Hewitt.  &amp;#039;&amp;#039;&amp;#039;[https://web.archive.org/web/20171210124010/https://vvvvw.aaai.org/Papers/Symposia/Spring/2006/SS-06-08/SS06-08-003.pdf The repeated demise of logic programming and why it will be reincarnated]&amp;#039;&amp;#039;&amp;#039;   What Went Wrong and Why: Lessons from AI Research and Applications.  Technical Report SS-06-08. AAAI Press.  March 2006.&lt;br /&gt;
&lt;br /&gt;
[[Category:Actor model (computer science)]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Zyploc</name></author>
	</entry>
</feed>