core: std_proc; rearrange definitions for clarity and other improvments

This commit is contained in:
Helmut Merz 2026-10-22 14:19:29 +02:00
parent 8f277a5263
commit affe948296
2 changed files with 35 additions and 34 deletions

View file

@ -58,6 +58,22 @@ def gen_program(spec: ProgramSpec, default: Proc = gen_proc({})) -> Program:
return proc
return program
def neuron(scope: Scope) -> Mailbox:
async def process(msg: Message) -> actor.Behavior | None:
nonlocal scope
scope = await scope.proc(msg, scope) or scope
return process
return actor.create(process)
def synapse(rcvr: Mailbox, op: SynOp = lambda x: x) -> Syn:
async def syn(msg: Message) -> None:
# op = update_op(msg) (=> return?)
# rv = check_return(msg) => return rv
msg_new = op(msg)
if msg_new is not None:
await rcvr.put(msg_new)
return syn
@dataclass
class Scope:
@ -79,38 +95,12 @@ class Scope:
def create_scope(env: Mailbox, cat: Categ = (k.csys, k.c00), **kw) -> Scope:
return Scope(environ=env, categ=cat, **kw)
def neuron(scope: Scope) -> Mailbox:
async def process(msg: Message) -> actor.Behavior | None:
nonlocal scope
scope = await scope.proc(msg, scope) or scope
return process
return actor.create(process)
def create_zero(env: Mailbox) -> Mailbox:
scope = create_scope(env)
zero = neuron(scope)
return zero
def synapse(rcvr: Mailbox, op: SynOp = lambda x: x) -> Syn:
async def syn(msg: Message) -> None:
# op = update_op(msg) (=> return?)
# rv = check_return(msg) => return rv
msg_new = op(msg)
if msg_new is not None:
await rcvr.put(msg_new)
return syn
def std_proc(actions: Actions) -> Proc:
return gen_proc(actions, finalize=forward())
def basic_actions() -> Actions:
acts: Actions = {
k.value: value_add(),
k.create: create()
}
return acts
# predefined action handlers
# predefined action handlers and Action sets
def forward() -> Handler:
async def handle(msg, scope) -> None:
@ -128,3 +118,18 @@ def create() -> Handler:
return None
return handle
def basic_actions() -> Actions:
acts: Actions = {
k.value: value_add(),
k.create: create()
}
return acts
# predefined specialized procs
def std_proc(actions: Actions | None = None, finalize=forward(), **kw) -> Proc:
if actions is None:
act_add = dict((k(key), val) for key, val in kw.items())
actions = basic_actions() | act_add
return gen_proc(actions, finalize=finalize)

View file

@ -7,12 +7,8 @@ from scopes.core import actor
from scopes.core.message import Message
from scopes.util import keywords as k
def program_env(scope: core.Scope) -> core.Proc:
async def proc(msg: Message, scope: core.Scope) -> None:
await scope.environ.put(msg)
return proc
def create(meta_env: core.Mailbox, prog: core.Program = program_env) -> core.Mailbox:
scope = core.create_scope(meta_env, (k.env, k.c00), program=prog)
def create(meta_env: core.Mailbox) -> core.Mailbox:
scope = core.create_scope(meta_env, (k.env, k.c00),
program=core.gen_program({}))
return core.neuron(scope)