Process {⨀,⨁,P}
step  : ⨁ P → P
run   : P → ⊥
get   : ⨀ P → P
start : ⊤ → P
Process : #process
     Documents : #document | {_,_}


        Errors : #error
           OKs : #history

Timers, Events : #event
         Tasks : #task
        Module : { action : 𝝨 P → P } 
IO
DEF
IO is a two execution lists of errors and sucesses
DEF — are events, timers, tasks and module of the process
ENV holds an options {_,_} or #documents used in actions
ENV
Timers
#boundaryEvent
name  *
timeout {0,{0,30,0}}
Technically each process spawns only one timer which handles ping and also term and step events per step or per process scope.
#event.timeout                       
#timer{event=ping}
tuneable heartbeat at bpe:config(ping)
erlang timediff
{Day,{Hrs,Min,Sec}}                             
ping is configuring globally; events are triggered only when distance between now and last event is less than pattern threshold in the #event.timeout description.
#boundaryEvent
'*' — any stage
'StageName' — applied to stage
#timoutEvent
termination event
completion event
'*' — any stage
'StageName' — applied to stage
action {request,'Stage'} P →
    1/0,{reply,P}.
Errors
Errors are written to separate #error KVS chain, user may worry about exception or not. If so then user need to depend logic from effects.
#error
kvs:add #error
   { feed_id = { errors, Pid } }
stderr stream
#history
stdout stream
kvs:add #history
   { feed_id = { history, Pid } }
Events
spawn λ → bpe:event Pid #messageEvent
   { payload = pb:service dep close }
Pid = P#process.id

Process Calculus

By Maxim Sokhatsky

Process Calculus

  • 2,816