[r6rs-discuss] Counter-proposal (Re: Proposed features for small Scheme, part 9: modules)

Marc Feeley feeley at iro.umontreal.ca
Thu Oct 15 09:53:40 EDT 2009


On 2009-10-15, at 1:11 AM, Arthur A. Gleckler wrote:

>> I am not the (or even an) implementer, but I believe that "module"
>> in Chicken is not a macro, but primitive syntax.  All it does is to
>> make any definitions use magic names of the form "modname#truename".
>> When the module is imported, the "modname#truename" names are located
>> and aliases are constructed for them in the current context.
>
> Interesting.  It seems like this concept of alias might be something
> that could form part of a useful substrate for modules.

For the record, Gambit also provides something similar with the  
"##namespace" declaration.  It provides "automatic prefixing" with a  
namespace prefix, for a given set of free identifier, or for all free  
identifier.  For example:

   (##namespace ("foo#"))  ;; every identifier is prefixed with foo#
   (##namespace ("" + define))  ;; except + and define
   (##namespace ("bar#" f))  ;; and f which is prefixed with bar#
   (define (f x) (+ x a other#b))

is equivalent to

   (define (bar#f x) (+ x foo#a other#b))

Note that an identifier containing a #, such as other#b and  
##namespace, remains as is (think of it as a "fully qualified  
identifier").

Marc




More information about the r6rs-discuss mailing list