Versions Compared


  • This line was added.
  • This line was removed.
  • Formatting was changed.


  • reloading of multimethods
  • reloading of records/types that implement a protocol
  • removal of "dead" vars
  • destroying/recreating stateful objects (threads, sockets, files, etc.)
  • Adding new dependencies to my Leiningen project. Solved by pomegranate ? Visible enough ? (added by Laurent Petit)

  • Infinite (or approaching infinite) loops
  • Protocol :impls leaks types when extending to a re-defined type

Possible Contributions to this Effort

  • tools.namespace contrib library 
    • Handles reloading at the namespace level
    • Needs to reach in and modify the private Var clojure.core/*loaded-libs* in order to truly "unload" a library
    • Ensures correct reload order by statically examining namespace dependencies
    • Also removes "dead" Vars that have been deleted from source files.
  • Pomegranate
    • Clojure interface to the Aether library, a general-purpose Jave API to Maven repositories and dependency resolution
  • Stuart's clojure workflow is a useful path to minimize the pain of restarts