I'm inclined to add a new command to XREPL that takes that approach, to experiment. I was spelunking in DrRacket source but I'm slow to isolate that from what else is going on. It sounds like you understand it; is there a code sample you could share?
On Sat, Feb 9, 2013 at 10:40 PM, Ray Racine <ray.rac...@gmail.com> wrote: > So apropos to > http://blog.racket-lang.org/2009/03/drscheme-repl-isnt-lisp.html one "fix" > to the enter! bug is to keep it as simple as possible and as Robby hinted, > fresh load the module into a new namespace on every enter. > > I've done some minimal testing and so far things appear to work. > > Advantage: > - No custom loader which attempts to minimize module reloading as currently > being done in enter.rkt. Instead use the existing CM logic within the > Racket's default behavior. > - enter.rkt is stable over internal changes as no tricks are being played > to "smart" incremental load. > - Reloading Typed Racket modules now works by a simple require/typed on > do-enter!. > - Emulates DrRacket behavior. > > Disadvantage, when (re)entering a module, it is from scratch, hence, slower. > But I've been re-entering slightly modified TR module in some of my personal > code that has a pretty healthy typed-racket module dependency graph and with > Racket's default CM behavior it's about a 3 sec load. > > The only issue with this approach is on support for re-entering/entering a > different module. Currently 'enter!' loads the module and then > extends/injects into the namespace racket/enter. Obviously this it to allow > one to enter! another module from within the currently entered module. In > plain ol' Racket no problem. > > However if the module I'm entering is a typed/racket module then the > injected do-enter! method is untyped and fails when trying to (re)enter > another module. By creating simple typed-enter.rkt which require/typed > do-enter! and then exports it everything works. > > So the goal is to have entering a module inject the proper typed or untyped > version of do-enter! by doing a namespace-require on either "enter.rkt" or > "typed-enter.rkt". To do that I need to query the current-namespace as to > whether the namespace language is racket or typed/racket, a > "namespace-language" procedure. > > How do I do that? > > > Thanks, > > Ray > > > On Thu, Feb 7, 2013 at 9:15 AM, Greg Hendershott <greghendersh...@gmail.com> > wrote: >> >> Once upon a time, ~5.3, the XREPL ,en command would always reload a >> file provided the timestamp changed. >> >> As a result, I could do something _roughly_ like DrRacket F5 in Emacs: >> Touch the file and ,en it. The whole file would be evaluated, and I'd >> have a REPL where I could explore/tweak. >> >> But somewhere around ~5.3.1, ,en stopped doing this reliably. >> Sometimes it would just do nothing, even if the file timestamp had >> changed (and even if I made some change to the contents, just in case >> it was doing a checksum or whatever). >> >> I thought to try using enter!. And that worked consistently. >> >> But somewhere around ~5.3.2, enter! has stopped behaving consistently. >> >> Does anyone have any idea would could be going on?? >> >> More info/comments: >> >> - I normally use XREPL. (require xrepl) is the _only_ thing in my >> racketrc. >> >> - The above issue happens with or without XREPL. (I tried again today >> to confirm.) >> >> - Although I love the idea of Geiser, I've had it also sometimes not >> reevaluate (similar issue). Anyway sometimes I just want to strip >> things down to be simpler; lately I'm in such a phase where I haven't >> been using it. I might or could use it again someday. >> >> - A (related?) issue is that sometimes the first invocation of enter! >> gives an error like this: >> >> > (enter! "client.rkt") >> module->namespace: module not instantiated in the current namespace >> name: >> #<resolved-module-path:"/Users/greg/src/scheme/collects/lob/example/client.rkt"> >> context...: >> /Users/greg/src/plt/racket/collects/racket/enter.rkt:33:0: do-enter! >> /Users/greg/src/plt/racket/collects/racket/private/misc.rkt:87:7 >> >> But then a second invocation works fine. i.e. Need to do it twice in a >> row. >> _________________________ >> Racket Developers list: >> http://lists.racket-lang.org/dev > > > > _________________________ > Racket Developers list: > http://lists.racket-lang.org/dev > _________________________ Racket Developers list: http://lists.racket-lang.org/dev