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 <mfl...@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