[plt-scheme] . nitpick .

From: Robby Findler (robby at cs.uchicago.edu)
Date: Sun Jun 10 18:04:45 EDT 2007

But, just for the relative newcomers to PLT Scheme, it is probably
better to just work with modules than namespaces.

Robby

On 6/10/07, Ryan Culpepper <ryanc at ccs.neu.edu> wrote:
> On Sun, 2007-06-10 at 19:07 +0200, Jos Koot wrote:
> > For the toplevel:
> >
> > (require (lib "r5rs" "lang"))
> > (current-namespace (module->namespace '(lib "r5rs" "lang")))
>
> Careful: that's not the right way to get a namespace with just the
> bindings from some module X. Instead, that gets you everything bound
> *inside* module X. It gives you access to the module's unexported
> bindings---including everything that it imports. It bypasses contracts
> placed on exports with 'provide/contract'. It doesn't do renaming or
> prefixing of exports, either. Unfortunately, on this particular module,
> it happens not to make a difference, so your code worked.
>
> 'module->namespace' is the right solution to only a very small set of
> problems. It's the most invasive thing one can do to a module.
> Programming environments and testing frameworks can get away with it,
> but ordinary programs, even those that deal with namespaces, shouldn't.
>
> Here's one way to get a namespace with only the bindings for a
> particular module "X":
>
>   ;; namespace-from-module : module-name -> namespace
>   ;; Constructs a namespace containing bindings for only the
>   ;; exports of the given module.
>   (define (namespace-from-module the-module)
>     (let ([orig-ns (current-namespace)])
>       (dynamic-require the-module #f)  ;; make sure module initialized
>       (parameterize ((current-namespace (make-namespace 'empty)))
>         (namespace-attach-module orig-ns the-module)
>         (namespace-require the-module)  ;; import the bindings
>         (current-namespace))))
>
> Then:
>
>   (namespace-from-module '(lib "r5rs.ss" "lang"))
>
> There are many variations on this code. If you want the consumer of the
> namespace to be able to set! the value bindings, use
> 'namespace-require/copy' to import the bindings instead. If you want to
> allow macro definitions, you'll need to use
> 'namespace-transformer-require' to put something in the transformer
> environment too. If you want a fresh instantiation of the module, then
> remove the call to 'dynamic-require' and only attach '(quote mzscheme)'
> instead of 'the-module'. And so on.
>
> Ryan
>
> >
> > Jos Koot
> >
> > ----- Original Message -----
> > From: "Grant Rettke" <grettke at acm.org>
> > To: "Jos Koot" <jos.koot at telefonica.net>
> > Cc: "Anton van Straaten" <anton at appsolutions.com>; "PLT Scheme"
> > <plt-scheme at list.cs.brown.edu>
> > Sent: Sunday, June 10, 2007 6:56 PM
> > Subject: Re: [plt-scheme] . nitpick .
> >
> >
> > > Does that do something like saying that only the r5rs functions will
> > > exist in the current name space?
> > >
> > > On 6/10/07, Jos Koot <jos.koot at telefonica.net> wrote:
> > >>
> > >> ----- Original Message -----
> > >> From: "Grant Rettke" <grettke at acm.org>
> > >> To: "Jos Koot" <jos.koot at telefonica.net>
> > >> Cc: "Anton van Straaten" <anton at appsolutions.com>; "PLT Scheme"
> > >> <plt-scheme at list.cs.brown.edu>
> > >> Sent: Sunday, June 10, 2007 6:25 PM
> > >> Subject: Re: [plt-scheme] . nitpick .
> > >>
> > >>
> > >> >I wonder why there isn't a r5rs module.
> > >>
> > >> But there is: (lib "r5rs" "lang")
> > >> Jos Koot
> > >>
> > >>
> > >> >
> > >> > On 6/10/07, Jos Koot <jos.koot at telefonica.net> wrote:
> > >> >> One could set (read-accept-dot #f) as default for language R5RS.
> > >> >> Adding (read-accept-dot #f) to .../collects/r5rs/lang.ss does the trick,
> > >> >> although another location may be more appropriate.
> > >> >> Jos koot
> > >> >>
> > >> >> ----- Original Message -----
> > >> >> From: "Anton van Straaten" <anton at appsolutions.com>
> > >> >> To: "PLT Scheme" <plt-scheme at list.cs.brown.edu>
> > >> >> Sent: Sunday, June 10, 2007 4:15 PM
> > >> >> Subject: [plt-scheme] . nitpick .
> > >> >>
> > >> >>
> > >> >> > Shouldn't the R5RS language level disallow the infix dot syntax?
> > >> >> >
> > >> >> > As seen in this message:
> > >> >> >
> > >> >> > http://groups.google.com/group/comp.lang.scheme/msg/40f19cb9863cf28d
> > >> >> >
> > >> >> > ...someone experimenting can get confused by the infix feature.  It
> > >> >> > would
> > >> >> > be
> > >> >> > helpful to be able to respond to that by saying "that's an extension --
> > >> >> > use
> > >> >> > the R5RS language level if you want to experiment with standard Scheme
> > >> >> > behavior".  But here, we can't say that.
> > >> >> >
> > >> >> > Anton
> > >> >> >
> > >> >> > _________________________________________________
> > >> >> >  For list-related administrative tasks:
> > >> >> >  http://list.cs.brown.edu/mailman/listinfo/plt-scheme
> > >> >> >
> > >> >>
> > >> >> _________________________________________________
> > >> >>   For list-related administrative tasks:
> > >> >>   http://list.cs.brown.edu/mailman/listinfo/plt-scheme
> > >> >>
> > >> >
> > >>
> > >>
> > >
> >
> > _________________________________________________
> >   For list-related administrative tasks:
> >   http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>
> _________________________________________________
>   For list-related administrative tasks:
>   http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>


Posted on the users mailing list.