Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Glossary

This glossary defines the main terms used by Boomerang’s public API and documentation. In type names, suffixes such as Spec, Context, and Factory describe where a value belongs in the lifecycle from application declaration to runtime execution.

Action

A typed event owned by a reactor. A logical action is scheduled in logical time; a physical action introduces an event from outside the deterministic reactor graph. TypedActionKey<T, Q> identifies an action while retaining its payload and action-kind types.

Assembly

The complete build-time model of a Boomerang application. Assembly stores the declared reactor, reaction, action, port, mode, and connection specifications, validates their relationships, analyzes dependencies and partitions, and then lowers the model into a RuntimeAssembly.

The published crate remains named boomerang_builder, and the top-level facade continues to expose it as boomerang::builder. Within that package, however, Assembly is the name for the build-time graph rather than “environment” or a generic builder.

Assembly Error

AssemblyError reports failures while declaring, validating, or lowering an assembly. Examples include duplicate definitions, invalid connections, dependency cycles, unsupported federation topology, and unresolved assembly keys.

Assembly Fully Qualified Name

AssemblyFqn is a hierarchical name for an object in an assembly, such as a reactor, action, reaction, or port. It is useful for lookup and diagnostics. An assembly FQN describes the declared graph; it is not yet the durable logical identity promised by the future deployment-independent recording model.

Assembly Key

A slot-map identity for one declaration stored in an Assembly. The concrete types are AssemblyReactorKey, AssemblyReactionKey, AssemblyActionKey, AssemblyPortKey, and AssemblyModeKey.

Assembly keys are valid while constructing and lowering that assembly. They are not stable recording identifiers and must not be persisted as deployment-independent identity. Typed wrappers such as TypedActionKey, TypedPortKey, and TimerActionKey add domain and payload information around the corresponding assembly key.

Boundary

A connection point between runtime partitions. A boundary may be local between enclaves or federated between coordinated participants. BoundaryKind and InterPartitionPlan describe the result of boundary analysis during lowering; the runtime backend supplies the corresponding delivery mechanism.

Connection

A declared route from an output port to an input port. A connection may have a logical delay and may remain within an enclave or cross an enclave or federate boundary. Lowering chooses the runtime delivery mechanism while preserving the connection’s logical behavior.

Context

A temporary cursor used while declaring part of an assembly. ReactorContext is the primary example: reactor macro output and manual declaration code use it to add ports, actions, modes, child reactors, reactions, and connections. A context mutates the assembly; it is not a stored graph node and does not survive lowering. Local variables conventionally use the short name ctx.

Declaration

A fluent, temporary API that records a specification in an assembly. ReactionDeclaration collects a reaction’s triggers, uses, effects, mode scope, and function before finish records a ReactionSpec. This is distinct from the stored specification and from a factory that creates a runtime object later.

Enclave

A runtime scheduling partition. Reactors within one enclave share a scheduler and can use direct runtime relationships. Connections between enclaves require asynchronous boundary delivery. An enclave is a runtime execution boundary; it is not synonymous with a federate, process, or host.

Factory

A callable value that creates a runtime object once lowering has resolved the runtime keys and aliases it needs. The Factory suffix distinguishes deferred runtime creation from assembly declaration. Examples include ActionFactoryFn, DeferredReactionFactory, and the DeferredRuntimeFactory trait.

Factories may capture declaration-time configuration, but they run at the assembly-to-runtime boundary rather than adding new specifications to the assembly.

Federate

A statically identified participant in coordinated federated execution. In the current experimental federation slice, each federate is placed at an enclave root and communicates through the runtime infrastructure loop (RTI). Federates, enclaves, processes, and hosts are separate concepts even where the current runner maps them one-to-one. See Static Federation.

History Transition

A mode transition that preserves the target mode’s local timing state. Pending mode-local logical actions, timers, and delayed connections resume with the same remaining local delay they had when the mode became inactive.

Local Time

Logical time measured only while a mode scope is active. Mode-local timers, logical actions, and delayed connections use local time.

Logical Time

The deterministic time coordinate used to order Boomerang events independently of wall-clock scheduling. A Tag contains a timestamp offset and a microstep; microsteps distinguish ordered events at the same timestamp. Logical actions, timers, delayed connections, federation messages, and recordings must preserve the complete tag.

Lowering

The consuming pass that transforms an Assembly into executable runtime data. Assembly::into_runtime_assembly validates the graph, chooses partitions, allocates runtime reactors, actions, ports, modes, and reactions, resolves assembly keys to runtime keys, and produces a RuntimeAssembly.

Lowering is distinct from declaration: declaration records the logical graph; lowering materializes a particular runtime representation of it.

Mode

A named state of a reactor. Exactly one sibling mode is active at a logical instant. ModeSpec stores a declared mode, while ModeEffectSpec describes a reset or history transition requested as a reaction effect.

Mode Scope

The static region of a reactor contained by a mode. Reactions, timers, logical actions, child reactors, and delayed connections declared inside the mode belong to that scope.

Port

A typed data endpoint on a reactor. Reactions read input ports and write output ports; connections route values between compatible ports. TypedPortKey<T, Q, A> retains the payload type, direction, and locality information used during safe declaration.

Partition

A region of the declared graph selected to execute behind one runtime boundary. Current lowering maps each partition root to an enclave and records cross-partition connections in an InterPartitionPlan. A partition is a graph and deployment concept; it is not automatically a process, host, or federate.

Reaction

A deterministic unit of behavior that runs when one of its triggers is present. A reaction may read declared uses and write declared effects. Its declaration is collected through ReactionDeclaration, stored as ReactionSpec, and lowered to a runtime reaction function.

Reactor

The main compositional component in Boomerang. A reactor owns state, ports, actions, reactions, modes, and child reactors. The Reactor trait is the application-facing construction interface commonly implemented by generated macro code; ReactorSpec is the type-erased declaration stored in an assembly.

Reactor Placement

ReactorPlacement records whether a declared reactor remains local, begins a new enclave, or represents a federate. Placement influences partition analysis during lowering without changing the reactor’s logical behavior.

Reset Transition

The default mode transition. It enters the target mode with fresh local timing state, discards pending mode-local events in the reset scope, and returns contained modal child reactors to their initial modes.

Runtime Aliases

RuntimeAliases maps assembly keys to the runtime keys allocated during lowering. Deferred factories use these maps when they need the runtime identity of an object declared earlier. These aliases are runtime-construction data, not durable application identity.

Runtime Assembly

RuntimeAssembly is the ready-to-run result of lowering an Assembly. It owns runtime enclaves and the resolved metadata needed by features such as replay and static federation. Runners consume it to create schedulers or federation roles; it no longer accepts logical graph declarations.

Runtime Environment

boomerang_runtime::Env is the executable state owned by a runtime enclave, including runtime reactors, actions, ports, reactions, and dependency data. It is genuine runtime “environment” vocabulary and is distinct from the build-time Assembly. Runners may return final runtime environments for inspection after execution.

Specification (Spec)

A stored build-time declaration inside an Assembly. ReactorSpec, ReactionSpec, ActionSpec, PortSpec, ModeSpec, and ConnectionSpec describe the logical graph before runtime allocation. TimerSpec, ModeEffectSpec, and FederateSpec are focused configuration specifications.

A Spec is data that the assembly validates and lowers. It is not the temporary context or declaration API used to record that data, and it is not the runtime object produced afterward. Traits such as ErasedPortSpec, ErasedConnectionSpec, and ParentReactorSpec provide type-erased or shared views over stored specifications.

Tag

The concrete logical-time coordinate of an event: a timestamp offset plus a microstep. Tags provide deterministic ordering, including multiple causally ordered events at the same timestamp. Recording, replay, and federation must preserve both components.

Timer

A built-in logical action scheduled from a TimerSpec. A timer may have an initial offset and an optional period. TimerActionKey is the typed declaration key used to trigger reactions from that timer.