Return of <<- (eg, "await" / coroutines)
Here I'm considering returning adding coroutines to Goblins. They'd work a bit differently than before, allowing composition in environments when called with
$ but without being able to interfere with anyone lower on the stack, thereby blocking re-entrancy attacks.
Instead of suspending to the top of the turn, an actor using
<<- would suspend to the top of its own call and would return a promise.
In effect, the following code would be equivalent:
(define ((^alice bcom bob)) (displayln "before") (define from-bob (<<- bob "hello")) (displayln "after"))
(define ((^alice bcom bob)) (displayln "before") (on (<- bob "hello") (lambda (from-bob) (displayln "after")) #:promise? #t))
<<- should be interpreted not only as
await but also as potentially "oh yeah I'm going so fast oh shiiiii" for the usual reasons: it's different than
$ in that the world is likely to change on you.
The choice to return
#:promise? #t probably will DTRT by default with asynchronous stuff due to promise pipelining/chaining/etc, and it also provides a path out for doing something sensible with