One of the downsides of interactive development and testing using the
REPL is the fact that an old definitions in a lib's namespace can
linger in memory after its source code has been deleted from the lib.
One can relaunch Clojure to be sure of clearing that situation, but
that often loses some desirable context. I'm proposing a change to
make relaunching Clojure for that purpose unnecessary.
With the new clojure/require and clojure/use, we've introduced a
suggested, preferred, best-supported way of working with Clojure in
which there's a one-to-one correspondence between a lib namespace and
the lib that defines it. The enclosed patch would ensure that any old
definitions in a lib namespace are discarded before loading the lib:
the namespace would be built up from scratch with each load. Putting
the 'remove-ns call at the location I suggest would allow ":reload"
and ":reload-all" to support this "from scratch" behavior as well.
(:reload-all is especially useful from the REPL.)
There may still be situations where other code can hold onto an old
definition across a reload but this change will cover the vast
majority of cases easily and reliably.
Would this be a good change?
--Steve
Index: boot.clj
===================================================================
--- boot.clj (revision 1013)
+++ boot.clj (working copy)
@@ -3045,6 +3045,7 @@
namespace exists after loading. If require, records the load so any
duplicate loads can be skipped."
[lib need-ns require]
+ (remove-ns lib)
(load-resources (root-resource lib))
(throw-if (and need-ns (not (find-ns lib)))
"namespace '%s' not found after loading '%s'"
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---