[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