Table of contents
Emits
Formal definition
Emission is a relation :
holding when creates a new instance and dispatches to channel — is ’s output but is not available to ’s caller; it enters ’s message queue or subscriber set.
One invariant. iff:
- Non-returnability: The emitted instance is not placed on ’s return stack and is not accessible to ’s caller after completes. The dispatched resource travels through a side channel — a queue, inbox, topic, actor mailbox, or event stream — that is decoupled from the invoker. This is the distinguishing condition: whatever returns to its caller is separate from what emits. An operation may simultaneously emit (to a channel) and return (to its caller) when and are distinct.
Milner: CCS output actions
Robin Milner (A Calculus of Communicating Systems, 1980; Communication and Concurrency, 1989): in CCS, a process can perform an output action , which sends a signal on channel and then behaves as . The output is an emission: it is not a return value from to its invoker but a synchronization offer placed on channel for any complementary input in a parallel process.
The (silent) transition results from the synchronization between ’s emission and ’s reception. The emitted value is consumed by ; ’s caller sees only the transition.
The π-calculus (Milner, Parrow, Walker, The Polyadic π-Calculus, 1992): extends CCS to channel-passing. emits channel name on channel . The emitted payload is a channel reference — emission can reconfigure the communication topology. This is the formal model of dynamic service binding: emitting an endpoint creates a new connection possibility without returning the endpoint to the caller.
Hewitt: the actor model
Carl Hewitt, Peter Bishop, Richard Steiger (A Universal Modular ACTOR Formalism for Artificial Intelligence, 1973): an actor is a computational entity with a mailbox address. An actor’s only means of output is sending messages to addresses it knows. Sending is an emission: the message enters the recipient’s mailbox; the sender does not wait for a response (asynchronous, non-blocking). The actor model formalizes emission as the primary communication primitive — there is no shared state and no return stack; all output is emission.
The actor replacement behavior: after sending messages, an actor specifies its next behavior. The sent messages are emitted; the next behavior is the local continuation. This separates emission (sent to others) from internal state (the replacement behavior).
Hoare: CSP events and channels
C.A.R. Hoare (Communicating Sequential Processes, 1978, 1985): in CSP, the event denotes process emitting value on channel . The output event is a synchronization barrier: blocks until a complementary input in parallel process is ready. Upon synchronization, flows from to through channel , and both proceed.
CSP channels are typed: means only values of type may be emitted on . This gives emission a static type discipline: the emitted type must match the channel’s declared type. The refinement relation (traces-refinement) is compatible with emission: refines only if ’s emissions are a subset of ’s (fewer or equal emissions are acceptable refinements).
Publish-subscribe and reactive streams
The publish-subscribe pattern (Eugster, Felber, Guerraoui, Kermarrec, The Many Faces of Publish/Subscribe, 2003): a publisher emits events to a topic; subscribers registered on that topic receive them. The publisher does not know the subscribers; the subscriber does not know the publisher. Emission is decoupled in both time and identity — the publisher’s action of emitting an event is independent of when and by whom it is consumed.
Reactive streams (Meijer et al., Rx: Reactive Extensions, 2010): formalize this as a cold/hot observable distinction. A hot observable emits regardless of subscribers; a cold observable emits only when subscribed. In both cases, emission is directed at a subscription channel, not at a calling frame.
Open questions
- Whether emission and return are formally dual in some categorical sense — whether a category of operations where morphisms are return-channels and a category where morphisms are emission-channels are related by a duality functor, and whether this duality corresponds to the CCS duality between input and output .
- Whether the distinction between emission (to a channel) and return (to the caller) breaks down in continuation-passing style — where every operation is transformed to take its “return channel” as an explicit continuation argument, making all outputs emissions to explicit continuations.