8sync.git
4 years agoactors: Introduce non-reentrant actors by default. wip-non-reentrant-actors
Rutger van Beusekom [Thu, 19 Nov 2020 06:52:16 +0000 (07:52 +0100)]
actors: Introduce non-reentrant actors by default.

* 8sync/actors.scm (actor-reentrant-message-handler): Rename from
actor-inheritable-message-handler.
(actor-non-reentrant-message-handler): New function that queues messages.
(<actor>): Change message-handler to that function and add message-q.
(<reentrant-actor>): New class for the old behaviour.
(initialize): Use the orignal message-handler for this new class.

4 years agowebsocket: Queue fragmented frames to avoid interleaving.
Rutger van Beusekom [Wed, 18 Nov 2020 15:12:28 +0000 (16:12 +0100)]
websocket: Queue fragmented frames to avoid interleaving.

4 years agowebsocket: Test failure interleaved frames from 2 separate messages.
Rutger van Beusekom [Thu, 19 Nov 2020 10:34:37 +0000 (11:34 +0100)]
websocket: Test failure interleaved frames from 2 separate messages.

4 years agosquash! websocket demo
Rutger van Beusekom [Wed, 18 Nov 2020 15:10:24 +0000 (16:10 +0100)]
squash! websocket demo

4 years agowebsocket: Gracefully handle read errors and socket close.
Jan (janneke) Nieuwenhuizen [Sun, 8 Nov 2020 07:30:39 +0000 (08:30 +0100)]
websocket: Gracefully handle read errors and socket close.

* 8sync/systems/websocket/client.scm (websocket-socket-open?): New
method.
(websocket-loop): Use it to gracefully handle errors socket close.

4 years agomingw: Hack for missing /dev/urandom.
Jan (janneke) Nieuwenhuizen [Fri, 30 Oct 2020 14:01:30 +0000 (15:01 +0100)]
mingw: Hack for missing /dev/urandom.

* 8sync/systems/websocket/client.scm (open-entropy-port): Add hack for
missing /dev/urandom.

4 years agomingw: Avoid SIGPIPE.
Jan (janneke) Nieuwenhuizen [Fri, 30 Oct 2020 14:00:39 +0000 (15:00 +0100)]
mingw: Avoid SIGPIPE.

* 8sync/systems/web.scm (initialize): Only set SIGPIPE if it is
available.

4 years agoagenda: Handle wrong-type-arg in select.
Jan (janneke) Nieuwenhuizen [Sat, 7 Nov 2020 09:45:32 +0000 (10:45 +0100)]
agenda: Handle wrong-type-arg in select.

This fixes

Backtrace:
          10 (apply-smob/1 #<catch-closure 7fca5dcad920>)
In ice-9/boot-9.scm:
    705:2  9 (call-with-prompt _ _ #<procedure default-prompt-handler (k proc)>)
In ice-9/eval.scm:
    619:8  8 (_ #(#(#<directory (guile-user) 7fca5d93f140>)))
In ice-9/boot-9.scm:
   2312:4  7 (save-module-excursion _)
  3832:12  6 (_)
In 8sync/actors.scm:
    812:6  5 (run-hive #<<hive> 7fca5d977190> _ #:cleanup _ #:handle-signals _)
In ice-9/control.scm:
    91:24  4 (call-with-escape-continuation _)
In 8sync/agenda.scm:
    569:6  3 (run-agenda #<<agenda> queue: (() . #f) prompt-tag: ("prompt") read-port-map: #<hash-table 7fca5…> …)
    470:7  2 (update-agenda-from-select! #<<agenda> queue: (() . #f) prompt-tag: ("prompt") read-port-map: #<h…>)
In ice-9/boot-9.scm:
    829:9  1 (catch system-error #<procedure 7fca5bf1ab70 at 8sync/agenda.scm:471:9 ()> #<procedure 7fca5cd09…> …)
In unknown file:
           0 (select (#<closed: file 7fca5b077380> #<input-output: socket 11>) (#<closed: file 7fca5b077380>) # …)

ERROR: In procedure select:
In procedure select: Wrong type argument in position 1: #<closed: file 7fca5b077380>

* 8sync/agenda.scm (update-agenda-from-select!): Catch everything.

4 years agowebsocket: Support for sending fragmented frames.
Jan (janneke) Nieuwenhuizen [Mon, 22 Apr 2019 17:30:22 +0000 (19:30 +0200)]
websocket: Support for sending fragmented frames.

* 8sync/systems/websocket/frame.scm (make-text-frame): Add keyword
parameters final and continuation.
(make-binary-frame): Likewise.
* 8sync/systems/websocket/client.scm (make-fragmented-frames): New
function.
(websocket-send): Use it to send fragmented frames.

4 years agowebsocket: Initial <websocket> client actor support.
Jan (janneke) Nieuwenhuizen [Mon, 22 Apr 2019 17:03:37 +0000 (19:03 +0200)]
websocket: Initial <websocket> client actor support.

* 8sync/systems/websocket/client.scm (no-op): New procedure.
(<websocket>): Change from record to actor and use it.
(websocket-init): New method.
(set-nonblocking!): New procedure.
(make-client-socket): Use it.
(make-websocket): Rename to...
(websocket-open): ...this new method and change accordingly.
(close-websocket): Rename to ...
(websocket-close): ...this new method and change accordingly.
(handshake, websocket-send, websocket-connecting, websocket-open?,
websocket-closing?, websocket-closed?): Change to method and update
accordingly.
(display-websocket): Move to...
(write)[<websocket]: ...this new specialization.
(set-record-type-printer!): Remove.
(websocket-loop): Renamed from...
* 8sync/systems/websocket/server.scm (websocket-client-loop): ...here.
(make-websocket-actor): New procedure.
(<websocket-server>): Call it for websocket upgrade, create new
<websocket> actor.
* demos/websocket/8s-client.scm,
demos/websocket/8s-server.scm,
demos/websocket/ws-client.js,
demos/websocket/ws-server.js: New files.
* Makefile.am (EXTRA_DIST): Add them.

4 years agowebsocket: Oops, avoid looping.
Jan Nieuwenhuizen [Tue, 28 Jan 2020 13:08:29 +0000 (14:08 +0100)]
websocket: Oops, avoid looping.

* 8sync/systems/websocket/server.scm (websocket-client-loop): Oops,
avoid looping.

4 years agobuild: Support cross building.
Jan Nieuwenhuizen [Wed, 6 Nov 2019 11:06:45 +0000 (12:06 +0100)]
build: Support cross building.

* configure.ac: Add AC_CANONICAL_HOST to get host.
* Makefile.am (.scm.go): Set it as target.

4 years agobuild: Prepare for guile 3.
Jan Nieuwenhuizen [Thu, 31 Oct 2019 14:39:40 +0000 (15:39 +0100)]
build: Prepare for guile 3.

* configure.ac: Check for guile 3.0 too.
* Makefile.am: Install in site-ccache.

4 years agoDo not read a frame past EOF.
Rutger van Beusekom [Fri, 22 Nov 2019 21:36:08 +0000 (22:36 +0100)]
Do not read a frame past EOF.

* 8sync/systems/websocket/frame.scm (read-frame): Handle EOF.

4 years agowebsocket: Also concatenate last fragmented frame.
Jan Nieuwenhuizen [Mon, 27 Jan 2020 17:35:12 +0000 (18:35 +0100)]
websocket: Also concatenate last fragmented frame.

* 8sync/systems/websocket/server.scm (websocket-client-loop): Also add
final fragmented frame.

5 years agoweb server: Treat upgrade requests as case-insensitive.
Jan Nieuwenhuizen [Mon, 22 Apr 2019 15:03:45 +0000 (17:03 +0200)]
web server: Treat upgrade requests as case-insensitive.

* 8sync/systems/web.scm (maybe-upgrade-request): Compare using
string-ci=?  Fixes upgrade request for "WebSocket".

5 years agodoc: Fix initial sleeper.
Jan Nieuwenhuizen [Thu, 18 Apr 2019 05:10:41 +0000 (07:10 +0200)]
doc: Fix initial sleeper.

* doc/8sync.texi (Writing our own actors): Add missing slot to initial
sleeper example.

5 years agoguix: Bump to guile-2.2
Jan Nieuwenhuizen [Mon, 22 Apr 2019 16:49:48 +0000 (18:49 +0200)]
guix: Bump to guile-2.2

* guix.scm (name): Bump to 2.2.

7 years ago8sync 0.4.2 v0.4.2
Christopher Allan Webber [Sat, 18 Mar 2017 05:54:27 +0000 (00:54 -0500)]
8sync 0.4.2

7 years agoAdd NEWS for 8sync 0.4.2
Christopher Allan Webber [Sat, 18 Mar 2017 05:07:58 +0000 (00:07 -0500)]
Add NEWS for 8sync 0.4.2

7 years agobuild: guix.scm: Use git-predicate procedure from Guix proper.
Christopher Allan Webber [Tue, 14 Feb 2017 20:16:37 +0000 (14:16 -0600)]
build: guix.scm: Use git-predicate procedure from Guix proper.

* guix.scm: Use git-predicate procedure from Guix to define source.

7 years agoweb: Remove web-deprecated.scm.
Christopher Allan Webber [Thu, 9 Feb 2017 21:28:22 +0000 (15:28 -0600)]
web: Remove web-deprecated.scm.

* 8sync/systems/web-deprecated.scm: Removed file.

7 years agowebsocket: Preventing some eof-object related errors.
Christopher Allan Webber [Thu, 9 Feb 2017 20:44:05 +0000 (14:44 -0600)]
websocket: Preventing some eof-object related errors.

* 8sync/systems/websocket/server.scm (websocket-client-loop):
Prevent some errors where eof-objects appear as the frame by
the time we hit the cond.

7 years agoactors: Avoid building up stack of error handlers when resuming coroutines.
Christopher Allan Webber [Mon, 30 Jan 2017 05:10:13 +0000 (23:10 -0600)]
actors: Avoid building up stack of error handlers when resuming coroutines.

However it's not clear that we're not still building up a stack of
prompts. :\

* 8sync/actors.scm (hive-process-message): Avoid building up stack of
error handlers when resuming coroutines.

7 years agoagenda: Always set sec/usec to exact time.
Christopher Allan Webber [Mon, 30 Jan 2017 05:08:22 +0000 (23:08 -0600)]
agenda: Always set sec/usec to exact time.

* 8sync/agenda.scm (delayed-time): Always set sec/usec to exact time.

7 years agormeta-slot: Rename wrap-rmeta-slot to build-rmeta-slot.
Christopher Allan Webber [Sun, 29 Jan 2017 22:14:56 +0000 (16:14 -0600)]
rmeta-slot: Rename wrap-rmeta-slot to build-rmeta-slot.

* 8sync/rmeta-slot.scm (build-rmeta-slot): Renamed from wrap-rmeta-slot.
(make-rmeta-slot): Removed.
* 8sync/actors.scm (build-actions): Update caller to build-rmeta-slot.
* tests/test-rmeta-slot.scm: Update tests.

7 years agoactors: Switch over to using wrap-rmeta-slot for build-actions.
Christopher Allan Webber [Wed, 25 Jan 2017 17:42:20 +0000 (11:42 -0600)]
actors: Switch over to using wrap-rmeta-slot for build-actions.

* 8sync/rmeta-slot.scm (wrap-rmeta-slot): New variable.

* 8sync/actors.scm (build-actions): Switch from using make-rmeta-slot
to using wrap-rmeta-slot.

* doc/8sync.texi (Writing our own actors): Update documentation
to use #:init-thunk.

* 8sync/actors.scm (<actor>, define-actor, <hive>):
* 8sync/systems/irc.scm (<irc-bot>):
* demos/actors/robotscanner.scm (<warehouse-room>, <droid>):
* tests/test-actors.scm (<hi-on-init>):
* tests/test-rmeta-slot.scm (<kah-lassy>, <sub-lassy>): Update to
use #:init-thunk instead of #:init-value on actions slot.

7 years agoactors: Use rmeta-slot for actions dispatch.
Christopher Allan Webber [Wed, 25 Jan 2017 00:06:58 +0000 (18:06 -0600)]
actors: Use rmeta-slot for actions dispatch.

* 8sync/actors.scm (actor-inheritable-message-handler, build-actions):
Use rmeta-slot tooling for action dispatch.

7 years agormeta-slot: Make equal? type hash table access the default.
Christopher Allan Webber [Tue, 24 Jan 2017 23:41:16 +0000 (17:41 -0600)]
rmeta-slot: Make equal? type hash table access the default.

This is the more general case, so we may as well.

* 8sync/rmeta-slot.scm (class-rmeta-ref): Set #:equals?, #:cache-set!,
and #:cache-ref all to equal? type access rather than eq? by default.

7 years agormeta-slot: New module for recursive meta-slot access.
Christopher Allan Webber [Tue, 24 Jan 2017 23:27:14 +0000 (17:27 -0600)]
rmeta-slot: New module for recursive meta-slot access.

This is an abstraction around the core idea driving the actor actions
system.  It turns out I need this abstraction for mudsync as well, so
I'm breaking it out.  Pleasantly, it should be much faster now, since
a cache is built for each class regarding what key should resolve to
what value.

* 8sync/rmeta-slot.scm:
* tests/test-rmeta-slot.scm: New modules.
* Makefile.am: Add them.

7 years agowebsocket: Adding myself to server copyright lines.
Christopher Allan Webber [Tue, 24 Jan 2017 17:19:57 +0000 (11:19 -0600)]
websocket: Adding myself to server copyright lines.

* 8sync/systems/websocket/server.scm: Adjust copyright lines.

7 years agowebsockets: Initial websocket support.
Christopher Allan Webber [Sun, 15 Jan 2017 00:24:34 +0000 (18:24 -0600)]
websockets: Initial websocket support.

* 8sync/contrib/base64.scm:
* 8sync/contrib/sha-1.scm:
* 8sync/ports.scm:
* 8sync/systems/websocket.scm:
* 8sync/systems/websocket/client.scm:
* 8sync/systems/websocket/frame.scm:
* 8sync/systems/websocket/server.scm:
* 8sync/systems/websocket/utils.scm: New files.

* Makefile.am (SOURCES): Add them.

* 8sync/systems/web.scm (<web-server>): Rename upgrade slot to
upgrade-paths and use it.
(.upgrade-paths, maybe-upgrade-request): New variables.
(web-server-client-loop): Upgrade protocol if appropriate.

7 years agoactors: Allow actors to specify whether to handle an *init* action.
Christopher Allan Webber [Sat, 21 Jan 2017 06:53:48 +0000 (00:53 -0600)]
actors: Allow actors to specify whether to handle an *init* action.

* 8sync/actors.scm (<actor>): New should-init slot.
(hive-handle-init-all, %hive-create-actor): Respect 'should-init slot.

7 years agoactors: Don't reply to a message when the messsage doesn't need a reply.
Christopher Allan Webber [Fri, 20 Jan 2017 23:58:20 +0000 (17:58 -0600)]
actors: Don't reply to a message when the messsage doesn't need a reply.

* 8sync/actors.scm (<-reply, <-reply*, <-reply-wait, <-reply-wait*):
Only reply to messages if they're waiting on a reply still.
This avoids the challenges of actors never having requested a
reply in the first place resulting in trying to resume a waiting
coroutine that doesn't exist, as well as maybe the bonus one of not
replying multiple times to a message.

7 years agorepl: Publish notification about repl updates to subscribers.
Christopher Allan Webber [Thu, 19 Jan 2017 17:10:08 +0000 (11:10 -0600)]
repl: Publish notification about repl updates to subscribers.

* 8sync/repl.scm (<repl-manager>): Convert to use define-class.
Switch all getters accessors from `repl-manager-' prefix to
dot-prefix.
Add subscribers slot.
Add action handlers for add-subscriber and remove-subscriber.
(repl-manager-cleanup, repl-manager-init): Use dot-prefix
getters/accessors.
(repl-manager-init): Update to inform subscribers after every time
we poll the REPL.
(repl-manager-add-subscriber, repl-manager-remove-subscriber): New
procedures.

7 years agoweb: Rename getters / accessors to use dot prefix.
Christopher Allan Webber [Sun, 15 Jan 2017 15:29:16 +0000 (09:29 -0600)]
web: Rename getters / accessors to use dot prefix.

* 8sync/systems/web.scm (<web-server>, .host, .family, .port-num)
(.addr, .socket, .http-handler): Rename getters/accessors from
web-server- prefix to dot prefix.
(web-server-socket-loop, web-server-handle-request, web-server-cleanup):
Update callers.

7 years agoweb: Rename handler slot to http-handler.
Christopher Allan Webber [Sun, 15 Jan 2017 15:26:27 +0000 (09:26 -0600)]
web: Rename handler slot to http-handler.

* 8sync/systems/web.scm (<web-server>, web-server-handle-request):
Rename handler slot to http-handler.

7 years agoAdd define-method-star.
Christopher Allan Webber [Wed, 11 Jan 2017 17:09:01 +0000 (11:09 -0600)]
Add define-method-star.

* 8sync/systems/define-method-star.scm: New file.

7 years agoUpdate copyrights.
Christopher Allan Webber [Wed, 11 Jan 2017 17:02:34 +0000 (11:02 -0600)]
Update copyrights.

* 8sync/actors.scm:
* 8sync/agenda.scm:
* 8sync/debug.scm:
* 8sync/repl.scm:
* 8sync/systems/irc.scm:
* 8sync/systems/web.scm:
* Makefile.am:
* demos/actors/botherbotherbother.scm:
* demos/actors/robotscanner.scm:
* demos/actors/simplest-possible.scm:
* demos/ircbot.scm: Update copyright lines.

7 years agoweb: New actorified version of the web server.
Christopher Allan Webber [Wed, 11 Jan 2017 16:54:14 +0000 (10:54 -0600)]
web: New actorified version of the web server.

* 8sync/systems/web.scm: New file.

7 years agoactors: Update comments on addresses.
Christopher Allan Webber [Mon, 9 Jan 2017 17:17:38 +0000 (11:17 -0600)]
actors: Update comments on addresses.

* 8sync/actors.scm: Updated comments on addresses.

7 years agobuild: Releasing 8sync 0.4.1. v0.4.1
Christopher Allan Webber [Sun, 8 Jan 2017 21:27:32 +0000 (15:27 -0600)]
build: Releasing 8sync 0.4.1.

* configure.ac: Bumping verison number to 0.4.1.

7 years agobuild: Fix install targets to point to Guile 2.2 instead of 2.0.
Christopher Allan Webber [Sun, 8 Jan 2017 21:26:43 +0000 (15:26 -0600)]
build: Fix install targets to point to Guile 2.2 instead of 2.0.

* Makefile.am (modir, godir): Fix install targets to point to Guile 2.2
instead of 2.0.

7 years agopackaging: Updating guix.scm to GPLv3+, setting source to checkout.
Christopher Allan Webber [Sun, 8 Jan 2017 20:08:17 +0000 (14:08 -0600)]
packaging: Updating guix.scm to GPLv3+, setting source to checkout.

I talked to Jan Nieuwenhuizen, who agreed to license their
contributions to this file under GPLv3+, simplifying the licensing.
The rest of 8sync is still LGPLv3+... this just applies to the Guix
packaging.  We also borrow some code from guile-sdl2 to set our source
to be from the package itself, making testing the package from
guix.scm easier.

* guix.scm: Switch license to GPLv3+.
Switch source to be from the local directory, borrowed from
guile-sdl2.

7 years agobuild: Releasing version 0.4.0. v0.4.0
Christopher Allan Webber [Sun, 8 Jan 2017 00:53:57 +0000 (18:53 -0600)]
build: Releasing version 0.4.0.

* configure.ac: Update version number to 0.4.0.

7 years agobuild: Update and comment on hash in guix.scm.
Christopher Allan Webber [Sun, 8 Jan 2017 00:57:15 +0000 (18:57 -0600)]
build: Update and comment on hash in guix.scm.

* guix.scm: Update hash, but also acknowledge that updating the hash
here is futile since releasing will have a different hash!  In the
future we'll have nicer code here that can use the code from the git
checkout.

7 years agobuild: Add guix.scm to tarball.
Christopher Allan Webber [Sun, 8 Jan 2017 00:56:08 +0000 (18:56 -0600)]
build: Add guix.scm to tarball.

Makefile.am (EXTRA_DIST): Add guix.scm.

7 years agobuild: Rename package.scm to guix.scm and update.
Christopher Allan Webber [Sun, 8 Jan 2017 00:52:34 +0000 (18:52 -0600)]
build: Rename package.scm to guix.scm and update.

* guix.scm: Renamed from package.scm and updated for v0.4.0.

7 years agobuild: Include bootstrap.sh in tarball.
Christopher Allan Webber [Sun, 8 Jan 2017 00:50:50 +0000 (18:50 -0600)]
build: Include bootstrap.sh in tarball.

* Makefile.am (EXTRA_DIST): Add bootstrap.sh.

7 years agoNEWS: Updating news for v0.4.0.
Christopher Allan Webber [Sun, 8 Jan 2017 00:18:37 +0000 (18:18 -0600)]
NEWS: Updating news for v0.4.0.

* NEWS: New 8sync 0.4 section.

7 years agobuild: Add gendocs.
Christopher Allan Webber [Sat, 7 Jan 2017 23:13:27 +0000 (17:13 -0600)]
build: Add gendocs.

* doc/gendocs.sh:
* doc/gendocs_template: New files.

* .gitignore: Update to ignore files built by gendocs.sh.

7 years agodoc: Move content from doc/8sync-new-manual.org to doc/8sync.texi.
Christopher Allan Webber [Sat, 7 Jan 2017 17:58:29 +0000 (11:58 -0600)]
doc: Move content from doc/8sync-new-manual.org to doc/8sync.texi.

* doc/8sync-new-manual.org: Deleted.
* doc/8sync.texi: Move content exported from doc/8sync-new-manual.org to
here.

7 years agodoc: Delete trailing whitespace.
Christopher Allan Webber [Fri, 6 Jan 2017 23:17:55 +0000 (17:17 -0600)]
doc: Delete trailing whitespace.

* doc/8sync-new-manual.org: Delete trailing whitespace.

7 years agodoc: Last minute cleanups to the tutorial before we move to texinfo.
Christopher Allan Webber [Fri, 6 Jan 2017 23:15:52 +0000 (17:15 -0600)]
doc: Last minute cleanups to the tutorial before we move to texinfo.

* doc/8sync-new-manual.org: Last minute cleanups to the tutorial before
we move to texinfo.

7 years agodoc: Add a note about actor-alive? being likely to be deprecated.
Christopher Allan Webber [Fri, 6 Jan 2017 22:23:50 +0000 (16:23 -0600)]
doc: Add a note about actor-alive? being likely to be deprecated.

* doc/8sync-new-manual.org: Add footnote about future deprecation of
actor-alive?.

7 years agodoc: Have telcmd tutorial example send itself a message for line handling.
Christopher Allan Webber [Fri, 6 Jan 2017 22:19:42 +0000 (16:19 -0600)]
doc: Have telcmd tutorial example send itself a message for line handling.

* doc/8sync-new-manual.org: Have telcmd tutorial example send itself a
message for line handling.

7 years agoirc: Convert handle-line to a message handler.
Christopher Allan Webber [Fri, 6 Jan 2017 21:58:16 +0000 (15:58 -0600)]
irc: Convert handle-line to a message handler.

* 8sync/systems/irc.scm (<irc-bot>): Add 'handle-line action handler,
which points to handle-line generic.
(dispatch-raw-line): Send message to our own actor to call handle-line.
(handle-line): Convert to be an action handler.

* demos/ircbot.scm:
* doc/8sync-new-manual.org: Update implementers of handle-line generic
method.

7 years agodoc: Reordering some paragraphs in the tutorial.
Christopher Allan Webber [Fri, 6 Jan 2017 18:21:44 +0000 (12:21 -0600)]
doc: Reordering some paragraphs in the tutorial.

* doc/8sync-new-manual.org: Reordering some paragraphs in the tutorial.

7 years agodoc: Remove stray #+END_SRC.
Christopher Allan Webber [Fri, 6 Jan 2017 18:19:00 +0000 (12:19 -0600)]
doc: Remove stray #+END_SRC.

* doc/8sync-new-manual.org: Remove stray #+END_SRC.

7 years agoagenda: Remove deprecated comment.
Christopher Allan Webber [Fri, 6 Jan 2017 17:29:27 +0000 (11:29 -0600)]
agenda: Remove deprecated comment.

* 8sync/agenda.scm (run-agenda): Remove comment, since we did the thing
it suggested doing in the future.

7 years agodoc: Some tutorial tweaks.
Christopher Allan Webber [Fri, 6 Jan 2017 16:11:54 +0000 (10:11 -0600)]
doc: Some tutorial tweaks.

* doc/8sync-new-manual.org: Small tutorial tweaks.

7 years agodoc: Move the "live hacking intermission" to the bottom.
Christopher Allan Webber [Thu, 5 Jan 2017 03:38:23 +0000 (21:38 -0600)]
doc: Move the "live hacking intermission" to the bottom.

* doc/8sync-new-manual.org: Move the "live hacking intermission" to
the bottom of the tutorial.

7 years agodoc: Tutorial additions.
Christopher Allan Webber [Thu, 5 Jan 2017 03:36:31 +0000 (21:36 -0600)]
doc: Tutorial additions.

* doc/8sync-new-manual.org: Add "Writing our own network-enabled
actor" section.  Clean up other sections, including moving the intro
to the tutorial blathering about IRC systems to a footnote.

7 years agoUse *init* and *cleanup* in existing actors.
Christopher Allan Webber [Thu, 5 Jan 2017 02:02:13 +0000 (20:02 -0600)]
Use *init* and *cleanup* in existing actors.

* 8sync/repl.scm (<repl-manager>):
* 8sync/systems/irc.scm (<irc-bot>): Switch from an 'init action to the
implicit '*init* action.

* 8sync/systems/irc.scm (<irc-bot>, irc-bot-cleanup): Add *cleanup*
handler.

* demos/ircbot.scm:
* doc/8sync-new-manual.org: Drop some calls to 'init when
bootstrapping-messages since we now use '*init*.

7 years agodemos: Switch botherbotherbother demo over to use define-actor.
Christopher Allan Webber [Wed, 4 Jan 2017 22:53:55 +0000 (16:53 -0600)]
demos: Switch botherbotherbother demo over to use define-actor.

* demos/actors/botherbotherbother.scm: Switch to use define-actor.

7 years agoactors: Cleanup on signals.
Christopher Allan Webber [Wed, 4 Jan 2017 20:12:15 +0000 (14:12 -0600)]
actors: Cleanup on signals.

* 8sync/actors.scm (run-hive): Handle signals, currently SIGINT and
SIGTERM, in a friendly way.  Will still run cleanup on actors.

7 years agoactors: Remove define-simple-actor, add define-actor.
Christopher Allan Webber [Wed, 4 Jan 2017 17:41:30 +0000 (11:41 -0600)]
actors: Remove define-simple-actor, add define-actor.

define-simple-actor wasn't very useful, whereas define-actor is
moderately helpful.

* 8sync/actors.scm (define-simple-actor): Remove.
(define-actor): New macro.

* demos/actors/robotscanner.scm:
* demos/actors/simplest-possible.scm:
* tests/test-actors.scm: Convert to use define-simple-actor instead of
define-actor.

7 years agodoc: Add a note about the calls to display.
Christopher Allan Webber [Wed, 4 Jan 2017 17:41:22 +0000 (11:41 -0600)]
doc: Add a note about the calls to display.

* doc/8sync-new-manual.org: Add paragraph.

7 years agodoc: Tweak and fix the "Writing our own actors" section.
Christopher Allan Webber [Wed, 4 Jan 2017 17:31:57 +0000 (11:31 -0600)]
doc: Tweak and fix the "Writing our own actors" section.

* doc/8sync-new-manual.org: Fixed some errors and made things a bit
clearer.

7 years agoactors: Rename msg-receive, msg-val to mbody-receive, mbody-val.
Christopher Allan Webber [Wed, 4 Jan 2017 16:28:18 +0000 (10:28 -0600)]
actors: Rename msg-receive, msg-val to mbody-receive, mbody-val.

* 8sync/actors.scm (mbody-receive, mbody-val): Rename from msg-receive,
msg-val.  Update all callers.

7 years agoactors: Add auto-init feature to actors.
Christopher Allan Webber [Wed, 4 Jan 2017 01:57:50 +0000 (19:57 -0600)]
actors: Add auto-init feature to actors.

* 8sync/actors.scm (<actor>): Add '*init* action to actions slot.
(<hive>, hive-handle-init-all): Add '*init-all* action.
(hive-handle-cleanup-all): Adjust comment.
(%hive-create-actor): Add send-init? argument, and when supplied
call <-wait on the actor's '*init* method.
(bootstrap-actor, bootstrap-actor*): Rename from hive-create-actor,
hive-create-actor*.  Switch init argument to init-args and pass in #f to
%hive-create-actor's send-init? argument.
(create-actor, create-actor*): Switch init argument to init-args
and pass in #t to %hive-create-actor's send-init? argument.
(run-hive): Add '*init-all* action call to the hive on the initial
queue.

* 8sync/debug.scm (bootstrap-actor-gimmie, bootstrap-actor-gimmie*):
Rename from hive-create-actor-gimmie, hive-create-actor-gimmie*.

* demos/actors/botherbotherbother.scm:
* demos/actors/robotscanner.scm:
* demos/actors/simplest-possible.scm:
* demos/ircbot.scm:
* doc/8sync-new-manual.org:
* tests/test-actors.scm: Change calls from hive-create-actor to
bootstrap-actor.

* tests/test-actors.scm: Add actor *init*'ing tests.

7 years agodoc: Add addendum section on relationship between 8sync and Fibers.
Christopher Allan Webber [Tue, 3 Jan 2017 17:48:28 +0000 (11:48 -0600)]
doc: Add addendum section on relationship between 8sync and Fibers.

* doc/8sync-new-manual.org: Add "8sync and Fibers" section.

7 years agoactors: Implicit from-actor argument <-foo methods, and add rest of <-foo*.
Christopher Allan Webber [Tue, 3 Jan 2017 01:20:58 +0000 (19:20 -0600)]
actors: Implicit from-actor argument <-foo methods, and add rest of <-foo*.

* 8sync/actors.scm (<-, <-wait, <-reply, <-reply-wait): from-actor is
now implicitly supplied via %current-actor parameter.
(<-*, <-reply*): New procedures.
(<-wait*, <-reply-wait*): Now pull from-actor from #:actor.

* 8sync/actors.scm:
* 8sync/systems/irc.scm:
* demos/actors/botherbotherbother.scm:
* demos/actors/robotscanner.scm:
* demos/actors/simplest-possible.scm:
* demos/ircbot.scm:
* tests/test-actors.scm: Update all callers of <-foo procedures to drop
from-actor argument.

* doc/8sync-new-manual.org: Update documentation of <-foo procedures to
drop from-actor argument.

7 years agoagenda: Rename start-agenda to run-agenda.
Christopher Allan Webber [Mon, 2 Jan 2017 22:33:10 +0000 (16:33 -0600)]
agenda: Rename start-agenda to run-agenda.

* 8sync/agenda.scm (run-agenda): Renamed from start-agenda.
* 8sync/actors.scm:
* tests/test-agenda.scm: Update all callers.

7 years agoactors: Rename *clean-up* back to *cleanup.
Christopher Allan Webber [Mon, 2 Jan 2017 21:38:23 +0000 (15:38 -0600)]
actors: Rename *clean-up* back to *cleanup.

By popular intarwebs opinion.

* 8sync/actors.scm (<actor>, <hive>, hive-handle-cleanup-all)
(self-destruct, run-hive): Rename all references of clean-up to cleanup.
(hive-handle-cleanup-all, run-hive-cleanup): Rename name from clean-up
version.
* tests/test-actors.scm: Likewise.

7 years agoactors: Rename actor-am-i-alive? to actor-alive?.
Christopher Allan Webber [Mon, 2 Jan 2017 21:15:59 +0000 (15:15 -0600)]
actors: Rename actor-am-i-alive? to actor-alive?.

* 8sync/actors.scm (actor-alive?): Rename from actor-am-i-alive?.
* 8sync/actors.scm:
* 8sync/repl.scm:
* doc/8sync-new-manual.org: Update all references to actor-alive?.

7 years agoactors: Automatically add cookie by default in hive-create-actor.
Christopher Allan Webber [Mon, 2 Jan 2017 21:15:29 +0000 (15:15 -0600)]
actors: Automatically add cookie by default in hive-create-actor.

Also switch separator in cookie from "-" to ":".

* 8sync/actors.scm (hive-gen-actor-id): Switch separator from "-" to ":".
(hive-create-actor): Automatically add a cookie based on the class name.
(hive-create-actor*): Tweak docstring.

7 years agotests: Fix broken test in test-actors.
Christopher Allan Webber [Mon, 2 Jan 2017 18:23:52 +0000 (12:23 -0600)]
tests: Fix broken test in test-actors.

* tests/test-actors.scm: Fix broken test, forgot to update expected output.

7 years agotests: Oops, forgot to add <exploder> to test-actors.
Christopher Allan Webber [Mon, 2 Jan 2017 18:21:23 +0000 (12:21 -0600)]
tests: Oops, forgot to add <exploder> to test-actors.

* tests/test-actors.scm: Add <exploder>.

7 years agoactors: Update self-destruct to run *clean-up* message handler.
Christopher Allan Webber [Mon, 2 Jan 2017 18:17:15 +0000 (12:17 -0600)]
actors: Update self-destruct to run *clean-up* message handler.

* 8sync/actors.scm (self-destruct): Wait on *clean-up* action before
self-destructing by default.
(run-hive): Add parameter to specify whether or not to clean-up after
the hive finishes its tasks.
* tests/test-actors.scm: Add tests for disabling #:clean-up on run-tasks
and ensuring that *clean-up* runs on self-destruct.

7 years agoactors: Rename *cleanup* action to *clean-up*.
Christopher Allan Webber [Mon, 2 Jan 2017 17:54:03 +0000 (11:54 -0600)]
actors: Rename *cleanup* action to *clean-up*.

* 8sync/actors.scm (<actor>, <hive>, hive-handle-clean-up-all, run-hive):
Rename *cleanup* to *clean-up* and *cleanup-all* to *clean-up-all*.
* tests/test-actors.scm: Likewise.

7 years agoactors: Add cleanup facility to run-hive.
Christopher Allan Webber [Mon, 2 Jan 2017 17:40:42 +0000 (11:40 -0600)]
actors: Add cleanup facility to run-hive.

* 8sync/actors.scm (build-actions): Moved location to be before <actor>
for compiler reasons.
(<actor>): Add *cleanup* default action to all actors, which does
nothing by default.
(<hive>, hive-handle-cleanup-all): New cleanup method, which gives
all actors still in the registry a chance to clean up.
(make-hive): Have the hive register itself to itself.
(run-hive): Now run in a dynamic-wind, and call run-hive-cleanup when
we're done.
(run-hive-cleanup): New variable.

* tests/test-actors.scm: New test to make sure cleanup is run.

7 years agotests: Add "speaker" utility.
Christopher Allan Webber [Mon, 2 Jan 2017 17:34:13 +0000 (11:34 -0600)]
tests: Add "speaker" utility.

* tests/utils.scm (speak-it, %speaker, speak, get-spoken, with-fresh-speaker):
New variables.
* tests/test-agenda.scm (speak-it): Remove in favor of new speaker from
utils.scm.  Update to use new speaker.

7 years agodoc: Rename calls to ez-run-hive to run-hive and adjust titles.
Christopher Allan Webber [Mon, 2 Jan 2017 00:46:08 +0000 (18:46 -0600)]
doc: Rename calls to ez-run-hive to run-hive and adjust titles.

* doc/8sync-new-manual.org: Rename calls to ez-run-hive to run-hive and
adjust titles.

7 years agoactors: Rename ez-run-hive to run-hive.
Christopher Allan Webber [Mon, 2 Jan 2017 00:45:50 +0000 (18:45 -0600)]
actors: Rename ez-run-hive to run-hive.

* 8sync/actors.scm (run-hive): Renamed from ez-run-hive.
All callers changed.

7 years agodocs: Added "Writing our own actors" section
Christopher Allan Webber [Sun, 1 Jan 2017 14:57:01 +0000 (08:57 -0600)]
docs: Added "Writing our own actors" section

* doc/8sync-new-manual.org: New "Writing our own actors and sending
messages between them" section.

7 years agodoc: Add pk debugging section.
Christopher Allan Webber [Sat, 31 Dec 2016 15:48:36 +0000 (09:48 -0600)]
doc: Add pk debugging section.

* doc/8sync-new-manual.org: Add pk debugging section.
Simplify some handle-line examples.

7 years agodoc: Finish "About live hacking" section.
Christopher Allan Webber [Fri, 30 Dec 2016 15:22:41 +0000 (09:22 -0600)]
doc: Finish "About live hacking" section.

* doc/8sync-new-manual.org: "An intermission: about live hacking" section
finished, at least for now.

7 years agoagenda: When re-invoking a continuation at the agenda, don't wrap in a catch.
Christopher Allan Webber [Wed, 28 Dec 2016 17:49:05 +0000 (11:49 -0600)]
agenda: When re-invoking a continuation at the agenda, don't wrap in a catch.

* 8sync/agenda.scm (<kontinue>): Add new record type which just wraps a
delimited continuation.
(8sync, 8sleep, 8yield): Wrap continuations in kontinue.
(agenda-run-once!): If "kontinue?", just resume the continuation without
catching errors (it already has an error handler!).

7 years agoagenda: Fix prompt buildup in agenda.
Christopher Allan Webber [Wed, 28 Dec 2016 16:33:19 +0000 (10:33 -0600)]
agenda: Fix prompt buildup in agenda.

Every time a delimited continuation was resumed, we were re-parameterizing.

* 8sync/agenda.scm (current-agenda-prompt): Remove.
(8sync-abort-to-prompt): Use (%current-agenda-prompt) parameter.
(%current-agenda-prompt): New prompt, deprecating %current-agenda.  This
is a slight optimization; we were only using the agenda for the prompt,
so we can remove the indirection of looking up the agenda prompt tag
every time.
(%current-agenda): Removed, see above.
(start-agenda): Move parameterization of %current-agenda-prompt,
current-read-waiter, and current-write-waiter here.
(agenda-run-once!): Remove parameterization.
Also remove comment which is irrelevant now that we're no longer using
an immutable-record-type on the agenda.

7 years agoagenda: Switch "yield" to "8yield" and export.
Christopher Allan Webber [Wed, 28 Dec 2016 16:29:58 +0000 (10:29 -0600)]
agenda: Switch "yield" to "8yield" and export.

This avoids a name collision with an existing procedure.  Plus yield was
never exported, apparently.

* 8sync/agenda.scm (8yield): Renamed from yield.

7 years agoagenda: Major cleanup.
Christopher Allan Webber [Tue, 27 Dec 2016 20:17:42 +0000 (14:17 -0600)]
agenda: Major cleanup.

* 8sync/agenda.scm (<agenda>, make-agenda, agenda-time): Move from being
an immutable-record-type to just a regular one.  Add set-agenda-queue!
and remove time slot.
(time-from-float-or-fraction, time-segment-right-format, <time-delta>)
(make-time-delta, tdelta, time-delta+, 8usleep): Removed.
(schedule-add!, schedule-segments-split): Remove let shadowing of time.
There's no need to always convert the time format since it should now be
correct by the time it gets here.
(delayed-time): New variable.
(run-delay, 8sleep): Use delayed-time.
(update-agenda-from-select!): Use gettimeofday instead of agenda-time.
(start-agenda): Remove get-time and handle-ports keyword arguments.
Simplify loop considerably.
(agenda-run-once!): Renamed from agenda-run-once.  Simplify the enqueue
part of the code since we've constrained what an acceptable time value
looks like.  Use set-agenda-queue!.

* tests/test-agenda: Update for changes to agenda.scm.

7 years agoactors: Add new method of running REPL via REPL actor.
Christopher Allan Webber [Tue, 27 Dec 2016 02:13:23 +0000 (20:13 -0600)]
actors: Add new method of running REPL via REPL actor.

Also adds new procedure to see if an actor is alive, and make use of it
in the new REPL actor.

* 8sync/actors.scm (actor-am-i-alive?): New procedure.
(ez-run-hive): Remove #:repl-server keyword.
* 8sync/repl.scm (<make-coop-server-handler, spawn-and-queue-repl-server!):
Remove.
(<repl-manager>, repl-manager-cleanup, repl-manager-init): New variables.
* demos/ircbot.scm (parse-args): Add --repl command line option.
(run-bot): Add and queue <repl-manager> actor if appropriate.

7 years agoactors: Removing unnecessary level of indirection around actor-message-handler.
Christopher Allan Webber [Mon, 26 Dec 2016 21:26:10 +0000 (15:26 -0600)]
actors: Removing unnecessary level of indirection around actor-message-handler.

* 8sync/actors.scm (actor-message-handler): Move to be a simple #:getter
of <actor>, which is what it really was already anyhow.

7 years agodoc: Add "A silly little IRC bot" section to new manual.
Christopher Allan Webber [Sun, 25 Dec 2016 15:31:45 +0000 (09:31 -0600)]
doc: Add "A silly little IRC bot" section to new manual.

* doc/8sync-new-manual.org: Add "A silly little IRC bot" section.

7 years agodemos: Import format in ircbot.scm.
Christopher Allan Webber [Sun, 25 Dec 2016 15:21:44 +0000 (09:21 -0600)]
demos: Import format in ircbot.scm.

* demos/ircbot.scm: Import "(ice-9 format)".

7 years agodoc: Add tutorial intro to the new manual.
Christopher Allan Webber [Sun, 25 Dec 2016 04:59:29 +0000 (22:59 -0600)]
doc: Add tutorial intro to the new manual.

* doc/8sync-new-manual.org: Fill in "Intro to the tutorial" section.

7 years agodoc: Drafting a new manual.
Christopher Allan Webber [Sat, 24 Dec 2016 19:55:47 +0000 (13:55 -0600)]
doc: Drafting a new manual.

* doc/8sync-new-manual.org: New file.  This is a temporary location for
manual contents while ideas for the manual are being spelled out.

7 years agoirc: Split irc-bot-send-line into main functionality and action handler.
Christopher Allan Webber [Sat, 24 Dec 2016 19:09:54 +0000 (13:09 -0600)]
irc: Split irc-bot-send-line into main functionality and action handler.

This allows irc-bot-send-line to be called directly.

* 8sync/systems/irc.scm (irc-bot-send-line): Update this procedure to
not have a message as one of the arguments so it can be called directly.
(irc-bot-send-line-action): Action handler, doing what irc-bot-send-line
previously did.
(<irc-bot>): Update actions mapping to point to irc-bot-send-line-action.

7 years agoactors: Update actor ids to use a vector rather than a cons cell.
Christopher Allan Webber [Sat, 24 Dec 2016 19:06:12 +0000 (13:06 -0600)]
actors: Update actor ids to use a vector rather than a cons cell.

This is a bit easier to read when read/written, and should be
comparatively efficient.

* 8sync/actors.scm (make-address, address-actor-id, address-hive-id):
Update to use a vector rather than a cons cell.