Module Primus.Machine

Primus Machine.

The Machine is the core of Primus Framework. The Machine behavior is extended/changed with Machine components.

The user analysis is usually written in a form of a component, and is registered with the Primus.Components.register function.

Machine identifier type.

val init : unit observation

A synonym to System.init

  • deprecated [since 2020-03] use System.init or System.start instead
val finished : unit observation

A synonym to System.fini

  • deprecated [since 2020-03] use System.fini or Machine.kill instead
val fork : (id * id) observation

fork (parent,child) occurs when the machine parent forks a new clone child. The computation continues in the child machine.

  • since 2.2.0
val switch : (id * id) observation

switch (was,now) occurs when computation switches from the machine was to the machine now.

  • since 2.2.0
val exn_raised : exn observation

exn_raised exn occurs every time an abnormal control flow is initiated

val kill : id observation

kill id occurs when the machine id is killed.

When this observation is made the machine enters the restricted mode with non-determinism and observations disabled.

module State : sig ... end

Machine State.

type 'a state = 'a State.t
module type State = sig ... end

An interface to the state.

module type S = sig ... end

The Machine interface.

module type Component = functor (Machine : S) -> sig ... end

A generic machine component.

type component = (module Component)

The Machine component.

module Make (M : Monads.Std.Monad.S) : S with type 'a m := 'a M.t

Make(Monad) a monad transformer that wraps the Machine into an arbitrary Monad.

module Main (M : S) : sig ... end

The Legacy Main System.

val add_component : component -> unit

add_component comp registers the machine component comp in the Primus Framework. The component's init function will be run every time the Machine compuation is run. After all components are initialized, the init observation is made.

The components shall not access the interpreter in their init function. Instead, they should subscribe to observations and/or initialize the machine state via Linker/Memory/Env components.

See also a more general register_component function.

  • deprecated [since 2020-03] use Components.register* instead