Next: Rolling your own vats, Up: Vats [Contents]
> (define my-vat (spawn-vat)) > my-vat => #<vat izvD0DJT>
Running spawn-vat
returns a vat object. Code can be run within
the context of a vat using the call-with-vat
procedure. This
is useful for bootstrapping vats, or hacking at the REPL:
> (define my-vat (spawn-vat)) > (call-with-vat my-vat (lambda () (define alice (spawn ^greeter "Alice")) ($ alice "Bob"))) => "Hello Alice, my name is Bob!"
For convenience, the with-vat
macro can be used instead of
call-with-vat
. Here’s the above example rewritten to use
with-vat
:
> (define my-vat (spawn-vat)) > (with-vat my-vat (define alice (spawn ^greeter "Alice")) ($ alice "Bob")) => "Hello Alice, my name is Bob!"
You can also use the vat-halt!
procedure to stop the vat, and
vat-running?
to check its status:
> (vat-halt! my-vat) > (vat-running? my-vat) => #f
NOTE: In the future, we would like vats to automatically halt
when no more references exist and thus the vat can do no more work.
The Racket version of vats works this way, it would be good for the
Guile version to do the same. In the meanwhile, you’ll need to call
vat-halt!
manually.