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