On this page:
Goblins:   a transactional, distributed actor model environment
8.12

Goblins: a transactional, distributed actor model environment🔗ℹ

Christine Lemmer-Webber

CAUTION: Goblins is currently alpha. Semantics may change and you may be forced to update your code. Be mindful of that before using this for anything that goes into production!

New in 0.10: Goblins is now under the stewardship of the Spritely Institute! We also now have a Guile version of Goblins, which is now the primary implementation of Goblins. Both Racket and Guile versions of Goblins can speak to each other, and the Racket version of Goblins is going to be maintained, but the Guile version is considered the canonical version now! Read more!

    1 What is Goblins?

      1.1 What works so far?

      1.2 What’s on its way?

    2 A tutorial

      2.1 Getting going

      2.2 Vats, actors, spawning, and immediate calls

      2.3 Message passing, promises, and multiple vats

        2.3.1 The basics

        2.3.2 Making and resolving our own promises

        2.3.3 Finally we have #:finally

        2.3.4 The on-fulfilled handler of "on" is optional

        2.3.5 "on" with non-promise values

        2.3.6 "on" can return promises too

        2.3.7 Promise pipelining

        2.3.8 Broken promise contagion

      2.4 Going low-level: actormaps

        2.4.1 Spawning, peeking, poking, turning

        2.4.2 Time travel: snapshotting and restoring

      2.5 Advanced object patterns

        2.5.1 Extending our methods

        2.5.2 Mixins

        2.5.3 Behavior pivoting as a kind of state machine

      2.6 How this relates to "object capability security"

      2.7 Sealers/unsealers and rights amplification

      2.8 Networked object interactions

      2.9 A peek into Goblins’ machinery

        2.9.1 Actors really are what they say they are

        2.9.2 So how does message passing work

        2.9.3 How can two actormaps communicate? (How do vats do it?)

      2.10 Working with Racket events in Goblins

    3 Goblins API

      3.1 Actors

        3.1.1 What is an "actor" in Goblins?

        3.1.2 Constructors and bcom

      3.2 Core procedures

      3.3 References

        3.3.1 Live vs Sturdy references

        3.3.2 Near vs far references

        3.3.3 Local vs remote references

      3.4 Actormaps

        3.4.1 Actormap methods

        3.4.2 whactormap

        3.4.3 transactormap

        3.4.4 Snapshotting and restoring actormaps

        3.4.5 Extra actormap procedures

        3.4.6 Vat connectors

      3.5 Vats

      3.6 Promises

      3.7 Detecting network failures

    4 Actor lib: a collection of utilities

      4.1 Cells

      4.2 Methods

      4.3 Facets

      4.4 Revokeable caretakers

      4.5 Cartoon swearing (select-$/<-)

      4.6 Etc etc...

    5 Distributed programming with CapTP

      5.1 What CapTP gives you

      5.2 CapTP Limitations

      5.3 CapTP usage example

        5.3.1 Launch a Tor daemon for Goblins

        5.3.2 Two Goblins programs chatting over CapTP

      5.4 CapTP API

      5.5 Netlayers

        5.5.1 Tor Onion Services

        5.5.2 Fake Intarwebs