[racket] confusing error message: what is "lang:read.1"?
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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20140808/add36d29/attachment.html>