From 3bc95aeaeb7871758e1952179f31bbe806adbf9a Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Sat, 9 Jul 2016 16:35:29 -0400 Subject: [PATCH] Update big-bang.rkt to the new Syndicate/Racket HLL. --- racket/syndicate/actor.rkt | 3 ++ racket/syndicate/examples/actor/big-bang.rkt | 39 +++++++++++--------- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/racket/syndicate/actor.rkt b/racket/syndicate/actor.rkt index d5febec..e98b5d3 100644 --- a/racket/syndicate/actor.rkt +++ b/racket/syndicate/actor.rkt @@ -23,6 +23,7 @@ asserted retracted rising-edge + (rename-out [core:message message]) suspend-script @@ -34,6 +35,8 @@ syndicate-effects-available? suspend-script* + ? ;; from pattern.rkt + ;; schedule-action! diff --git a/racket/syndicate/examples/actor/big-bang.rkt b/racket/syndicate/examples/actor/big-bang.rkt index 2cc0cc4..0a9a15a 100644 --- a/racket/syndicate/examples/actor/big-bang.rkt +++ b/racket/syndicate/examples/actor/big-bang.rkt @@ -23,24 +23,27 @@ (define (draggable-shape name orig-x orig-y image) (define (window-at x y) (window name x y 10 (seal image))) (define (mouse-left-event-type? t) (member t '("leave" "button-up"))) - (define (idle ticks x y) - ;; TODO: Once "tail-calls" between `state`s are fixed, remove the - ;; ugly returning-of-an-immediately-called-thunk-from-the- - ;; termination-handlers here and in `dragging`. - ((state [#:collect [(ticks ticks) (x x) (y y)] - (assert (window-at x y) #:meta-level 1) - (on (message (tick-event) #:meta-level 1) - (define new-ticks (+ ticks 1)) - (define displacement (* (cos (* new-ticks 10 1/180 pi)) 4)) - (values new-ticks x (+ y displacement)))] - [(message (mouse-event $mx $my name "button-down") #:meta-level 1) - (lambda () (dragging mx my (- mx x) (- my y)))]))) - (define (dragging mx my dx dy) - ((state [#:collect [(mx mx) (my my)] - (assert (window-at (- mx dx) (- my dy)) #:meta-level 1) - (on (message (mouse-event $mx $my _ "drag") #:meta-level 1) (values mx my))] - [(message (mouse-event $mx $my _ (? mouse-left-event-type? $t)) #:meta-level 1) - (lambda () (idle 0 (- mx dx) (- my dy)))]))) + ;; + ;; N.B. Currently (9 July 2016), fields are not properly + ;; garbage-collected on tail-calls between states, as you pick up + ;; and put down shapes, you'll see their field-tables grow. + ;; + (define (idle ticks0 x0 y0) + (react (field [ticks ticks0] [x x0] [y y0]) + (assert (window-at (x) (y)) #:meta-level 1) + (on (message (tick-event) #:meta-level 1) + (ticks (+ (ticks) 1)) + (y (+ (y) (* (cos (* (ticks) 10 1/180 pi)) 4)))) + (stop-when (message (mouse-event $mx $my name "button-down") #:meta-level 1) + (dragging mx my (- mx (x)) (- my (y)))))) + (define (dragging mx0 my0 dx dy) + (react (field [mx mx0] [my my0]) + (assert (window-at (- (mx) dx) (- (my) dy)) #:meta-level 1) + (on (message (mouse-event $nmx $nmy _ "drag") #:meta-level 1) + (mx nmx) + (my nmy)) + (stop-when (message (mouse-event $mx $my _ (? mouse-left-event-type? $t)) #:meta-level 1) + (idle 0 (- mx dx) (- my dy))))) (actor (idle 0 orig-x orig-y))) (big-bang-dataspace #:width 640