[racket] confusing error message: what is "lang:read.1"?

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Mon Aug 11 06:28:34 EDT 2014

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


Posted on the users mailing list.