1 Preface
Welcome to 8sync’s documentation!
8sync is an asynchronous programming environment for GNU Guile.
(Get it? 8sync? Async??? Quiet your groans, it’s a great name!)
8sync has some nice properties:
- 8sync uses the actor model as its fundamental concurrency
synchronization mechanism.
Since the actor model is a "shared nothing" asynchronous
environment, you don’t need to worry about deadlocks or other
tricky problems common to other asynchronous models.
Actors are modular units of code and state which communicate
by sending messages to each other.
- If you’ve done enough asynchronous programming, you’re probably
familiar with the dreaded term "callback hell".
Getting around callback hell usually involves a tradeoff of other,
still rather difficult to wrap your brain around programming
patterns.
8sync uses some clever tricks involving "delimited continuations"
under the hood to make the code you write look familiar and
straightforward.
When you need to send a request to another actor and get some
information back from it without blocking, there’s no need
to write a separate procedure… 8sync’s scheduler will suspend
your procedure and wake it back up when a response is ready.
- Even nonblocking I/O code is straightforward to write.
Thanks to the "suspendable ports" code introduced in Guile 2.2,
writing asynchronous, nonblocking networked code looks mostly
like writing the same synchronous code.
8sync’s scheduler handles suspending and resuming networked
code that would otherwise block.
- 8sync aims to be "batteries included".
Useful subsystems for IRC bots, HTTP servers, and so on are
included out of the box.
- 8sync prioritizes live hacking.
If using an editor like Emacs with a nice mode like Geiser,
an 8sync-using developer can change and fine-tune the behavior
of code while it runs.
This makes both debugging and development much more natural,
allowing the right designs to evolve under your fingertips.
A productive hacker is a happy hacker, after all!
In the future, 8sync will also provide the ability to spawn and
communicate with actors on different threads, processes, and machines,
with most code running the same as if actors were running in the same
execution environment.
But as a caution, 8sync is still very young.
The API is stabilizing, but not yet stable, and it is not yet well
"battle-tested".
Hacker beware!
But, consider this as much an opportunity as a warning.
8sync is in a state where there is much room for feedback and
contributions.
Your help wanted!
And now, into the wild, beautiful frontier.
Onward!