'''''Description''''' Actor systems are a line of research by CarlHewitt (a professor in the AI laboratory at MIT) in the seventies. There is an alternative ThreadMode page on this Wiki using the (historically perhaps less accurate) ActorsModel moniker. Actor systems are based on a ModelOfComputation involving collections of self contained ''actors'', which are entities with the following characteristics: * A unique identity for each actor. * A list of identities of other actors it can interact with, called its ''acquaintances''. * A ''script'' that drives the behaviour of the actor, which involves constructing and sending ''messages'' (themselves actors) to its acquaintances, and receiving, examining and processing messages received from other actors. Computation then proceeds as a pattern of message exchanges among actors. '''''Motivation''''' This model of computation maps well onto '''fine grained''' massively parallel, distributed computer systems, because there is no shared state, and maximum concurrently is allowed in the message passing patterns. Hewitt envisaged that a possible evolutionary path of computer systems was indeed as chips and boxes containing very large numbers of simple general purpose processors. Part of the research involved for example concept like greedy, speculative execution, and the consequent need to garbage collection of processes. '''''Evolution''''' However, so far the dominant evolutionary path of computer systems has been towards even more complex and faster single processor systems for which the more conventional procedural ModelOfComputation is more suitable. Therefore ActorSystem research is somewhat obscure, and mainly of historical interest except that early variants of SmallTalk were strongly influenced by it, as AlanKay worked with Carl Hewitt, and from there ActorSystem terminology, in particular MessagePassing, entered the OO mainstream in a somewhat pervasive way. This is why Smalltalk refers to message calls as ''sending messages'', even though Smalltalk-80 "messages" have synchronous (blocking-the-caller) semantics similar to function/method calls in most other maintstream procedural and OO languages. While it is very natural to write programs for ActorSystem computational engines using ObjectOriented decomposition, in particular its prototype oriented variant, almost all ObjectOriented languages and programs are based on the procedural model of computation, and also are class oriented rather than prototype oriented, and the conflation of ActorSystem terminology and concepts with those of ObjectOriented programming has lead to much confusion. There is some speculation that the growth of single processor performance has hit some limits and that fine grained, massively parallel distributed systems are therefore the way of the future, and this may lead to a resurgence of interest in the ActorSystem model of computation. '''''Pointers''''' * Alternate ThreadMode page: ActorsModel * ActorLanguages * A site dedicated to actor systems: http://www.dekorte.com/docs/actors/ * History of actor research up to 1993: ftp://sail.stanford.edu/pub/MT/93actors.ps.Z * Page about the main original actor languages: http://hopl.murdoch.edu.au/showlanguage.prx?exp=3346 * Advocacy of ACT-1, a later actor language: http://agents.www.media.mit.edu/people/lieber/Lieberary/OOP/Act-1/Concurrent-OOP-in-Act-1.html * A very recent (2004) actor language and system simulator: http://www.ncc.up.pt/tyco/ * The Free Lunch Is Over (why no 10GHz today): http://www.gotw.ca/publications/concurrency-ddj.htm -- Blissex 040505