Some have claimed that
actor behaviors are Unit functions. While it is true that calls (messages) to an actor do not "return" any value, I believe this is a fundamental misunderstanding of the Actor model. I've attempted to capture the semantics of the "classical" actor model as simply as I can.
A configuration is a set of actors and a list of events.
C = < { actor, ... }, [ event, ...] >
An event is a target (an actor address) and message.
< target, message >
An actor is a mapping from address (ocap identity) to behavior.
behavior[address]
A behavior is a function from event to effect.
event → effect
An effect is a set of new actors, a list of new events, and a new behavior.
< { actor′, ... }, [ event′, ...], behavior′ >
A semantic step is defined by a transition function from configuration to configuration.
C → C′
The transition function takes an event from the event list (usually the first),
and applies the behavior of the target to the message producing an effect.
The effect defines the updated configuration by removing the processed event,
adding the new actors, appending the new events,
and updating the behavior associated with the target actor.