[racket] confusing error message: what is "lang:read.1"?
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.