Next: , Up: Vats   [Contents]


5.2.1 Starting and stopping vats

> (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.