On Sat, 2013-01-26 at 23:11 -0500, Faré wrote:
Because the package was delete-package'd in an unwind-protect form after loading the .asd file, and its symbols are thereafter uninterned.
Then keep it, store it somewhere and perhaps delete it only when no longer referenced.
I have no way to know when the package is not referenced.
Keep a list of all temporary packages created and keep a mapping system->temporary-package. After each find-system, run a garbage collection.
ASDF currently assumes nothing useful will be done with it after the asd is done loading. That's just wrong. I say stop trying to shield users from the responsibility of namespace management by making things more complex. They already need to create private packages for private uses, anyway, and they already can create all the clashes they want, anyway.
I think ASDF should be as DWIM-ish as possible, which benefits everybody; or, in other words, better avoid responsibility and concentrate it into a central place(ASDF). Unnecessary responsibility just causes headaches.
I respect the *central-registry* feature and will keep supporting it. It's great for advanced developers like you. Don't want no caching? Keep using the *central-registry*, it's not going away any time soon.
However, the caching is a big win for those of us who use :tree, especially on implementations on which scanning is slow. And that means most end-users and newbies, who want things to just work with minimal configuration (i.e. none at all if possible).
That's fine, but I'd like to be able to disable caching. And I'm not using *central-registry* but this configuration:
(:source-registry (:directory (:home "lisp/systems")) :inherit-configuration)
Maybe what you want is this:
(defmethod asdf:operate :before (o c &key &allow-other-keys) (declare (ignorable o c)) (unless asdf::*system-being-operated* (asdf:initialize-source-registry)))
Thanks, I'll try it.