Browse Source

<<- now works!

e-like
Christopher Lemmer Webber 8 years ago
parent
commit
11619a74ef
No known key found for this signature in database
GPG Key ID: 4BC025925FF8F4D3
  1. 43
      goblins/actors.rkt

43
goblins/actors.rkt

@ -16,6 +16,8 @@
racket/random
racket/async-channel)
(require linkeddata/pk)
(module+ test
(require rackunit))
@ -303,13 +305,14 @@ to us."
(please-resolve 'fulfilled args))))))))
actor-prompt-tag
(lambda (k to kws kw-args args)
(on (keyword-apply <- kws kw-args to args)
;; resume continuation
(lambda vals
(k (vector 'resume-values vals)))
#:catch
(lambda (err)
(k (vector 'error err)))))))
(parameterize ([current-actable (new actable%)])
(on (keyword-apply <- kws kw-args to args)
;; resume continuation
(lambda vals
(k (vector 'resume-values vals)))
#:catch
(lambda (err)
(k (vector 'error err))))))))
;; Bootstrapping methods
;; =====================
@ -397,7 +400,6 @@ to us."
[(vector 'external-spawn actor will return-ch)
(define actor-id
;; TODO: I don't think we need this, but maybe we do?
;; (parameterize ([current-actable (new actable%)]))
(do-spawn actor will))
(channel-put return-ch actor-id)
(lp)]
@ -489,8 +491,31 @@ to us."
(displayln 'bob-pre-alice)
(on (<- alice)
(lambda (val)
(displayln (format "got: ~a" val))))
(displayln (format "got: ~a" val)))
#:finally
(lambda ()
(displayln "TGIF!")))
(displayln 'bob-post-alice))))
(define breakable
(spawn
(lambda ()
(error "I broke!")
'bork)))
(define uses-breakable
(spawn
(lambda ()
(on (<- breakable)
(lambda _ (displayln "That worked? Really???"))
#:catch
(lambda (err)
(displayln (format "got error: ~a" err)))
#:finally
(lambda ()
(displayln "I hate mondays"))))))
(<- (spawn (lambda ()
(displayln (format "Got: ~a"
(<<- alice))))))
#;(define putter
(spawn

Loading…
Cancel
Save