[plt-scheme] Attaching modules to namespaces in compiled code
At Mon, 26 Jan 2009 03:11:37 +0100, Jakub Piotr Cłapa wrote:
> The only-in/for-label require combination will take care of including
> the module in the compiled binary?
Yes. The `require' sets up a dependency that pulls the module into the
binary.
> (why both? wouldn't an empty only-in
> be sufficient?)
The empty `only-in' avoids introducing any bindings.
The `for-label' avoids tying execution of the enclosing module to
execution of the referenced module.
For example, suppose you have
;; stay.ss
#lang scheme
(printf "staying\n")
(define result 'double)
(provide result)
;; go.ss
#lang scheme
(printf "going\n")
(define result 'trouble)
(provide result)
;; letmeknow.ss
#lang scheme
(require scheme/runtime-path)
(define-runtime-module-path s "stay.ss")
(define-runtime-module-path g "go.ss")
(let loop ()
(case (read)
[(cool-it) (dynamic-require s 'result)]
[(blow) (dynamic-require g 'result)]
[else (loop)]))
Then,
1) An empty `only-in' is needed because "stay.ss" and "go.ss" both
supply `result'.
2) Using `for-label' avoids printing "staying" or "going" until after
stdin supplies either "cool-it" or "blow".
Matthew