From b6b02bf71af8d0428632aa639cf49e78c8c3b9fd Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Fri, 19 Jan 2024 00:03:32 +0200 Subject: [PATCH] Make publish and spawn discardable --- src/syndicate/actors.nim | 9 ++++++--- syndicate.nimble | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/syndicate/actors.nim b/src/syndicate/actors.nim index 4b93ef8..ccd4868 100644 --- a/src/syndicate/actors.nim +++ b/src/syndicate/actors.nim @@ -296,11 +296,11 @@ proc publish(turn: var Turn; r: Cap; v: Value; h: Handle) = act.enqueue.event.detail.assert.handle = h turn.desc.actions.add act -proc publish*(turn: var Turn; r: Cap; a: Value): Handle = +proc publish*(turn: var Turn; r: Cap; a: Value): Handle {.discardable.} = result = turn.facet.nextHandle() publish(turn, r, a, result) -proc publish*[T](turn: var Turn; r: Cap; a: T): Handle = +proc publish*[T](turn: var Turn; r: Cap; a: T): Handle {.discardable.} = publish(turn, r, a.toPreserves) proc retract(turn: var Turn; e: OutboundAssertion) = @@ -459,7 +459,7 @@ proc bootActor*(name: string; bootProc: TurnAction): Actor = else: result.traceStream = openFileStream(path, fmWrite) run(result, bootProc, initialAssertions) -proc spawn*(name: string; turn: var Turn; bootProc: TurnAction; initialAssertions = initHashSet[Handle]()): Actor = +proc spawn*(name: string; turn: var Turn; bootProc: TurnAction; initialAssertions = initHashSet[Handle]()): Actor {.discardable.} = let actor = newActor(name, turn.facet.actor.handleAllocator) enqueue(turn, turn.facet) do (turn: var Turn): var newOutBound: Table[Handle, OutboundAssertion] @@ -594,6 +594,9 @@ proc newCap*(relay: Facet; e: Entity): Cap = proc newCap*(turn; e: Entity): Cap = Cap(relay: turn.facet, target: e) +proc newCap*(e: Entity; turn): Cap = + Cap(relay: turn.facet, target: e) + type SyncContinuation {.final.} = ref object of Entity action: TurnAction diff --git a/syndicate.nimble b/syndicate.nimble index 8aab614..7be17e8 100644 --- a/syndicate.nimble +++ b/syndicate.nimble @@ -1,6 +1,6 @@ # Package -version = "20240116" +version = "20240119" author = "Emery Hemingway" description = "Syndicated actors for conversational concurrency" license = "Unlicense"