[racket] confusing error message: what is "lang:read.1"?
I've finally tracked down the problem and pushed a repair (commit
c4508ad0d9).
At Fri, 8 Aug 2014 07:05:04 -0700, Matthew Butterick wrote:
> FWIW this isn't a gratuitously perverse example. It's derived from the actual
> bug I've encountered. I use `eval` in my Pollen system to handle dynamic
> rendering of pages delivered through the web server (don't panic, everyone —
> it's an approved use of `eval` [1])
>
> I use the `dynamic-rerequire` to reload files that have changed since last
> render. In fact you added it at my request, as I was looking for a Racket
> function that approximated the Python `reload` function. [2]
>
> For now I've worked around the bug — in test-case terms, I've changed this
>
> ;;; three.rkt
> #lang racket
>
> To this:
>
> ;;; three.rkt
> #lang racket/base
>
> But why that makes a difference, I'm not clear.
>
> [1] http://docs.racket-lang.org/web-server/faq.html
> [2] http://lists.racket-lang.org/users/archive/2013-April/057530.html
>
>
> On Aug 7, 2014, at 10:23 PM, Matthew Flatt <mflatt at cs.utah.edu> wrote:
>
> > At Wed, 6 Aug 2014 15:50:41 -0700, Matthew Butterick wrote:
> >> Under certain circumstances, because of what I assume is a bug in my code, I
> >> get an error like this:
> >>
> >>> define-values: assignment disallowed;
> >>> cannot re-define a constant
> >>> constant: lang:read.1
> >>> in module: "/Users/mb/git/racket/racket/collects/racket/main.rkt"
> >>> context...:
> >>> (submod /Users/mb/git/racket/racket/collects/racket/main.rkt reader):
> >> [running body]
> >>
> >> I understand how the "assignment disallowed" error arises. What I don't
> >> understand is the meaning of "lang:read.1" in this context. I'm guessing it
> has
> >> something to do with the #lang line (?) but ... the rest is hazy.
> >
> > The "lang:read" part is the name of a variable that appears in the
> > macro expansion of the `racket` module's `reader` submodule. The ".1"
> > part is because that variable is macro-introduced so that it is not
> > directly accessible using the name `lang:read`.
> >
> > The way that `dynamic-rerequire` and submodules interact here is
> > unsatisfying. I think it's a collision between the way that
> > `dynamic-rerequire` pulls from source and the use of
> > `namespace-module-attach` within `make-base-namspace`, and I think that
> > `dynamic-rerequire` needs to do something different, but I haven't yet
> > sorted it out.
>
> ____________________
> Racket Users list:
> http://lists.racket-lang.org/users