Re: [Scheme-reports] Are generated toplevel definitions secret?
Andy Wingo 24 Apr 2011 14:40 UTC
Hi Peter,
On Sun 24 Apr 2011 15:55, Peter Bex <Peter.Bex@xs4all.nl> 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:
(begin
(define-syntax define-constant
(syntax-rules ()
((_ var init)
(begin
(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?
Thanks,
Andy
--
http://wingolog.org/
_______________________________________________
Scheme-reports mailing list
Scheme-reports@scheme-reports.org
http://lists.scheme-reports.org/cgi-bin/mailman/listinfo/scheme-reports