[gambit-list] how does make-default-entry-hook work?
Marc Feeley
feeley at iro.umontreal.ca
Mon Feb 23 12:36:16 EST 2009
On 23-Feb-09, at 3:25 AM, lowly coder wrote:
> Urgh ...
>
> (define (setup hook)
> (let ((settings (##closure-ref hook 1)))
> (##vector-set! settings 1 #t)
> (if (##not (##memq proc ##trace-list))
> (set! ##trace-list (##cons proc ##trace-list)))))
>
> does ##closure-ref do what I think it does? (break the closure
> abstraction ... and is the "1" like saying "the first var [which
> just so happens to be settings]")
No time to go into the details right now, but yes the compiled
closures use a flat representation (a structure with a "code" pointer
followed by the free non-global variables of the lambda).
>
> this seems awfully hairy + brittle
Depends. The free variables are sorted (based on their name), so it
is possible by a code analysis (and a careful writing of the lambda)
to figure out which one is referenced. So it is somewhat brittle for
"general use", but for implementing the evaluator itself it is an
appropriate abstraction. The evaluator's code would of course gain in
clarity if these constants were symbolic... and that should be fixed.
Marc
More information about the Gambit-list
mailing list