[racket-dev] patch for make-base-eval

From: Robby Findler (robby at eecs.northwestern.edu)
Date: Wed Oct 2 19:21:26 EDT 2013

namespace-attach-module sets up shared state between two modules so that,
in this case, the racket/pretty in one namespace is the same as the
racket/pretty in the other.

Try putting a printf in the top-level of racket/pretty (and in various
other places in that code as it does what it does) and then doing the
dynamic-require with and without the attach.

Robby


On Wed, Oct 2, 2013 at 4:58 PM, Stephen Chang <stchang at ccs.neu.edu> wrote:

> Ok here's another dumb question. Why is that namespace-attach-module
> even needed? It seems the dynamic require on the next line does the
> desired thing?
>
> On Wed, Oct 2, 2013 at 4:16 PM, Stephen Chang <stchang at ccs.neu.edu> wrote:
> > Ok thanks for the explanations. I'll try doing one of the last two
> suggestions.
> >
> > On Wed, Oct 2, 2013 at 4:09 PM, Ryan Culpepper <ryanc at ccs.neu.edu>
> wrote:
> >> No, the 'racket/pretty' module might be declared even if the symbol
> isn't
> >> defined (or "mapped") in the namespace:
> >>
> >>   > (define ns (make-base-namespace))
> >>   > (define repl-ns (current-namespace))
> >>   > (parameterize ((current-namespace ns))
> >>       (eval '(require (only-in racket/pretty))))
> >>   > (parameterize ((current-namespace ns))
> >>       (namespace-attach-module repl-ns 'racket/pretty))
> >>   namespace-attach-module: a different module with the same name is
> >>   already in the destination namespace
> >>     module name: "/opt/racket-5.3.6/collects/racket/pretty.rkt"
> >>     context...:
> >>      /opt/racket-5.3.6/collects/racket/private/misc.rkt:87:7
> >>
> >> And the symbol can be defined in the namespace even if the module is not
> >> declared:
> >>
> >>   > (define ns (make-base-namespace))
> >>   > (define repl-ns (current-namespace))
> >>   > (parameterize ((current-namespace ns))
> >>       (eval '(define pretty-print-handler #t)))
> >>   > (parameterize ((current-namespace ns))
> >>       (namespace-variable-value 'pretty-print-handler))
> >>   #t
> >>   ;; but racket/pretty is not declared,
> >>   ;; and #t is not a good print handler
> >>
> >> Ryan
> >>
> >>
> >>
> >> On 10/02/2013 03:58 PM, Stephen Chang wrote:
> >>>>
> >>>> A namespace is a mapping from top-level identifiers to whatever they
> are,
> >>>> as
> >>>> well as a separate mapping from module names to modules (roughly).
> What
> >>>> you
> >>>> care about here is the second mapping, but you're checking the first
> with
> >>>> the patch.
> >>>
> >>>
> >>> Thanks for the explanation. That helps a lot. So the danger with my
> >>> check is when someone has another definition of pretty-print handler
> >>> but racket/pretty has not been attached?
> >>>
> >>> But given the context, ie the dynamic require on the next line, it
> >>> seems like there's already an assumption about what the identifier I'm
> >>> checking is, so in this specific situation, isnt my check sufficient?
> >>>
> >>>
> >>>
> >>>>
> >>>> Robby
> >>>>
> >>>>
> >>>> On Wed, Oct 2, 2013 at 2:45 PM, Stephen Chang <stchang at ccs.neu.edu>
> >>>> wrote:
> >>>>>
> >>>>>
> >>>>>> Whether that identifier exists in the namespace has nothing to do
> with
> >>>>>> whether racket/pretty can be attached.
> >>>>>
> >>>>>
> >>>>> Can you explain this a little more because it's a little unintuitive
> to
> >>>>> me?
> >>>>>
> >>>>>
> >>>>>>
> >>>>>> One option would be for install-pretty-printer! to just catch and
> >>>>>> discard
> >>>>>> the error. Evaluators for some languages would mysteriously not have
> >>>>>> pretty-printing turned on by default.
> >>>>>>
> >>>>>> Another option would be to attach racket/pretty before requiring the
> >>>>>> initial
> >>>>>> language for the namespace.
> >>>>>>
> >>>>>> Another option is use #:pretty-print? #f when attaching
> racket/pretty
> >>>>>> would
> >>>>>> fail.
> >>>>>>
> >>>>>> Ryan
> >>>>>>
> >>>>> _________________________
> >>>>>    Racket Developers list:
> >>>>>    http://lists.racket-lang.org/dev
> >>>>
> >>>>
> >>>>
> >>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/dev/archive/attachments/20131002/78cdf808/attachment-0001.html>

Posted on the dev mailing list.