Yes, the `engine` function is like `thread`: it captures parameter values at the point that the engine is created.
I'll fix the docs. At Sat, 28 Jun 2014 21:35:58 -0400, Neil Van Dyke wrote: > With the "racket/engine" module, is the "engine" procedure supposed to > capture the Racket parameter values that will be used for the proc when > "engine-run" is applied? Rather than the parameters coming from the > dynamic extent in which "engine-run" is applied? > > The example below shows that parameters don't work with engines as I'd > originally assumed. (The parts about custodians are because that's what > I was originally debugging.) > > #lang racket/base > > (require racket/engine > racket/file) > > (printf "with engine as i'd expect...\n") > (let ((temp-path (make-temporary-file "xxx~A")) > (temp-port #f)) > (let* ((cust (make-custodian (current-custodian))) > (eng (engine (lambda (disable-suspend) > (if (eq? (current-custodian) cust) > (printf "OK: current-custodian is cust\n") > (printf "FAIL: current-custodian is not > cust\n")) > (set! temp-port > (open-output-file temp-path #:exists > 'replace)))))) > (or (parameterize ((current-custodian cust)) > (engine-run 3000 eng)) > (error "engine-run timed out")) > (custodian-shutdown-all cust)) > (if (port-closed? temp-port) > (printf "OK: port was closed\n") > (printf "FAIL: port was not closed\n"))) > > ;; with engine as i'd expect... > ;; FAIL: current-custodian is not cust > ;; FAIL: port was not closed > > (printf "with engine capturing parameters early...\n") > (let ((temp-path (make-temporary-file "xxx~A")) > (temp-port #f) > (another-param (make-parameter 'initial))) > (let* ((cust (make-custodian (current-custodian))) > (eng (parameterize ((current-custodian cust) > (another-param 'around-engine)) > (engine (lambda (disable-suspend) > (if (eq? (current-custodian) cust) > (printf "OK: current-custodian is cust\n") > (printf "FAIL: current-custodian is not > cust\n")) > (printf "(another-param) = ~S\n" > (another-param)) > (set! temp-port > (open-output-file temp-path #:exists > 'replace))))))) > (or (parameterize ((another-param 'around-engine-run)) > (engine-run 3000 eng)) > (error "engine-run timed out")) > (custodian-shutdown-all cust)) > (if (port-closed? temp-port) > (printf "OK: port was closed\n") > (printf "FAIL: port was not closed\n"))) > > ;; with engine capturing parameters early... > ;; OK: current-custodian is cust > ;; (another-param) = around-engine > ;; OK: port was closed > > Thanks, > Neil V. > > ____________________ > Racket Users list: > http://lists.racket-lang.org/users ____________________ Racket Users list: http://lists.racket-lang.org/users