From: Christopher Allan Webber Date: Fri, 14 Jul 2017 19:36:16 +0000 (-0500) Subject: Big refactor for 8sync on fibers in progress. X-Git-Url: https://jxself.org/git/?a=commitdiff_plain;h=57b7dfc7a351017e09bd158889ed45fa57e51289;hp=57b7dfc7a351017e09bd158889ed45fa57e51289;p=8sync.git Big refactor for 8sync on fibers in progress. * 8sync/actors.scm (%random-state, *random-state*, big-random-number): Removed %random-state in favor of mutating *random-state* variable. (, make-message): Remove replied slot from . (message-auto-reply?, message-needs-reply?): Removed. (%<-, <-, <-wait): Update to make use of new inbox channels. These are now the only two message-sending operators. (send-message, <-*, <-wait*, <-reply, <-auto-reply, <-reply-wait) (wait-maybe-handle-errors): Removed. The <-reply mechanisms in particular are no longer necessary since the returned values of the called procedure are automatically the return value's reply. (): Actors no longer have access to the hive itself, and instead have access to the hive's channel through the new `hive-channel' slot. Actors also generate their own message ids through their `msg-id-generator' slot, since the hive is no longer responsible for generating these messages. Likewise, actors no longer communicate to other actors through the hive (though relays/ambassadors will be coordinated through there). Instead, addresses now contain the actor's channel and stop-condition, unless the actor is remote, in which case a relay will be looked up via the hive (well, eventually). New slot named `inbox-deq' which is what the actor's main loop actually reads from to get messages from the delivery-agent. The `*init*' and `*cleanup*' actions have been removed. (actor-init!, actor-cleanup!): New methods; these are how actors may initialize and clean themselves up, taking the place of the previous special-case `*init*' and `*cleanup*' actions. (make-address): Update to support `channel' and `dead?' slots. (address-channel, address-dead?): New getters. (address-equal?): New procedure for comparing two addresses. (actor-id-actor, actor-id-hive, actor-id-string): Move from being methods to normal procedures. (*current-actor*): Renamed from %current-actor. (actor-inbox-enq, *actor-prompt*, actor-main-loop): New variables. (hive-handle-failed-forward): Removed. (): No longer a subtype of since this runs in its own loop. Removed several slots and added the `id', `channel', and `halt?' slots. (make-hive): Updated to reflect new design. (hive-handle-init-all, hive-handle-failed-forward, hive-handle-cleanup-all) (hive-id, hive-gen-actor-id, hive-gen-message-id, hive-resolve-local-actor) (hive-resolve-ambassador, make-forward-request, hive-reply-with-error) (, hive-process-message, hive-actor-local?) (hive-register-actor!, %hive-create-actor): Removed. (gen-actor-id, hive-main-loop, *current-hive*, spawn-hive, run-hive) (%create-actor, condition-signalled?, actor-alive?): New variables. (bootstrap-actor, bootstrap-actor*, create-actor, create-actor*): Updated to use %create-actor. (call-with-message, mbody-receive, mbody-val): Removed. (self-destruct): Updated behavior to signal `address-dead?' condition and message the hive via the hive-channel, along with running `actor-cleanup!'. (run-hive, run-hive-cleanup, bootstrap-message, serialize-message) (write-message, serialize-message-pretty, pprint-message, read-message): (read-message-from-string): Removed. * 8sync/inbox.scm: New file. Provides the delivery-agent procedure which is run in its own fiber as a buffered queue. * 8sync/systems/irc.scm (): Remove `*init*' and `*cleanup*' action handlers. (actor-init!, actor-cleanup!): Add method handlers for `' based off of former `irc-bot-init' and `irc-bot-cleanup' respectively. * demos/actors/botherbotherbother.scm: * demos/actors/robotscanner.scm: * demos/actors/simplest-possible.scm: Update to use new semantics. * Makefile.am (SOURCES): Comment out a bunch of modules which aren't ready to be built with WIP 8sync-fibers branch. Also add inbox.scm. * guix.scm: Add `guile-fibers' to `propagated-inputs' and switch guile reference from `guile-next' to `guile-2.2' package variable. ---