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

From: Robby Findler (robby at eecs.northwestern.edu)
Date: Thu Oct 3 15:16:34 EDT 2013

Do you need to do the same thing with file/convertible?

Robby


On Thu, Oct 3, 2013 at 1:09 PM, Stephen Chang <stchang at ccs.neu.edu> wrote:

> Here's another attempt at a patch. Would someone mind code reviewing it?
>
> Ryan pointed me towards sandbox-namespace-specs and it seems to do the
> trick. I also added some tests and the docs seem to compile ok.
>
> On Wed, Oct 2, 2013 at 7:21 PM, Robby Findler
> <robby at eecs.northwestern.edu> wrote:
> > 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/20131003/7480c2a1/attachment-0001.html>

Posted on the dev mailing list.