I have always been under the impresssion that an actor is more or less defined as an isolated process that communicates via message passing, with each process sending messages others via inserting them in some mailbox. Describing Erlang/OTP and Scala/Akka as actor implementations would embody that view.
Actors, as described by Carl Hewitt* - who is arguably the creator of the model - turn out not to mean lightweight threads that exchange messages. They're far more restricted, yet in a sense significantly more profound and fundamental. Under his defintion, an actor is a formalism for an primitive of concurrent computation. The sense of the word "primitive" here might mean something like the
for loop is a primitive of structured programming.
If not lightweight threads, then what? Hewitt Actors can create other actors, respond to messages, update their own state and send asyncronous messages to their acquainences. The rest is superfluous, perhaps even internally inconsistent. In Hewitt's mind, there is no requirement for an actor to have a mailbox, for example. That mailbox would itself be an actor, requiring its own actor-mailbox, ad infinitum. Hewitt describes mailbox implementations as "Fog Cutter" Actors.
In the Hewitt Actor model, there is no global state. There are no universal truths. Information propogated through the social network of actors. In effect, the entire application would operate in a manner like DNS. Or, as was intended, operate like a scientific community. In 1976, he described his overall intentions of the project:
The long term goal is to construct systems whose behavior approximates the behavior of scientific societies. That is, the ultimate aim is to build systems which model the way scientists construct, communicate, test, and modify theories.
In this light, the actor model really looks like it is attempting to emphasise the connectedness of actors, rather than their isolation. Perhaps a better term for Hewitt's model would have been neuron or hypernode or something? Actor still sounds to me a little like imposter or façade.
Reading through them, I found papers relating to actor model mid-70s and into the mid-80s quite fasinating at least in part because of the fascination and enthusiasm that lept out of almost every page. In the 80s, he and his MIT colleagues were deeply inspired by a) the prospect of emerging massively parallel computer architectures, such as the Connection Machine, b) creating a new model of computation that could efficiently make use of them and c) the prospect of mimicing scientific communities to create peer-to-peer distributed knowledge workable. I found this quote from one of Hewitt's then-PhD students, Gul Agha, particularly representative given it was penned in 1985:
However, there is now good reason to believe that we may have approached the point of deminishing returns in terms of the size and speed of the individual processor. Already, smaller processors would be far more cost-effective, if we could use large numbers of them cooperatively. In particular, this implies being able to use them in parallel.
Actor programming remains influential, if somewhat niche, as a method for implementing distributed systems. Proponents have emphaised the safety guarantees of message passing semantics and many distributed algorithms avoid global state entirely.
It is somewhat sad to me though that the most interesting part of the overall actor mission, to create systems that can resolve conflict and reason cooperatively, has never really resonated. Perhaps it is just too hard. I am sure that Hewitt is impressed with the prominence of the Internet of Things, Merkel trees and probably even the DAO. Still, I'm sure he and his students must be shaking their fists slightly. I wonder though how many people are willing to learn the lessons of 40 years ago by reading scanned copies old papers.
Given the vague nature of human language and the differences that arise between theorical computer science and implementation. It's difficult to distinguish between CSP, dataflow programming and message passign in general.
* Fun Fact: Hewitt got his account banned from Wikipedia for his articles on Actor programming