[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Scheme-reports] Are generated toplevel definitions secret?

Hi Peter,

On Sun 24 Apr 2011 15:55, Peter Bex <Peter.Bex@x> writes:

> On Sun, Apr 24, 2011 at 03:39:37PM +0200, Andy Wingo wrote:
>> How does this relate to modules and separate compilation?  I haven't
>> figured out a good way to implement this yet.
> [snip]
>> Guile does not currently introduce hygienic bindings for introduced
>> toplevel identifiers, for this reason.  I think it's the same in
>> Chicken's case, but they can tell you more about that.
> Chicken uses an import library for that.  This library contains
> information about a module's exported symbols and macros.
> It also contains a mapping of bare identifiers to "internal" names.
> These internal names are stable and comprise the actual "API" of
> the imported library.  In Chicken's case, this mapping looks like
> '((x . a#x) (y . a#y)) if the module name is a and it exports x and y.
> When a module is imported somewhere, these mappings are added to the
> syntactic environment so that it knows what to map them to.
> I hope this sheds some light on how it works in Chicken.

Thanks for the note.  In my example:

        (define-syntax define-constant
          (syntax-rules ()
            ((_ var init)
               (define val init)
               (define-syntax var (identifier-syntax val))))))

        (define-constant x 10)
        (define-constant y 20))

If I put that in a chicken module, import the module, then access "x"
and "y", does that evaluate to 10 and 20, respectively?



Scheme-reports mailing list