On Mar 19, 2008, at 3:10 PM, Bradley Lucier wrote:
The core issue might be that even with (declare (block)) in Gambit, when it sees
(define foo 'wait)
(letrec ((bar values)) (set! foo bar))
it won't treat foo as immutable (because it's just been mutated ;-).
I understand.
Maybe gambit needs a define-values form or something like it.
Or something like (init foo bar) which says that I'm defining this and swear not to change it ever. Note that this only affects inter- module connections. The variables within a module are still local, allowing copy propagation, constant folding, and inlining within a module. This works nicely for separately-compiled modules. At some point I will target whole-program expansion, which facilitates whole- program optimizations---just not today.
Aziz,,,