On Tue, Oct 18, 2011 at 16:50, Сергей Катревич linkfly1@newmail.ru wrote:
Is there any particular effect you think would be useful at load time that wouldn't be better done at compile-time?
The main application - monitoring changes in the Lisp system after loading the code (see attachment)
Main concept code: (let ((old-all-packages (list-all-packages))) (load *test-file*) (set-difference (list-all-packages) old-all-packages))
i am don't know need whether add :around-load key, but need tracking changes in lisp image. Example: tracking new packages.
Moreover, need to check that the component entities will provide such packages: (: file "somefile": provided (: packages (: pkg1: pkg2)))
Oh, package management in the context of ASDF: tricky!
Indeed, packages are typically created a compile-time, while compiling your package.lisp file or equivalent. So there should be no package created while loading -- at least when building from clean, because when you're doing an incremental compilation, the package will instead be created by loading the package.fasl.
Therefore, your around-load package tracking will not be deterministic in a compiled from clean vs incrementally compiled scenario. around-compile package tracking will work perfectly from clean, and from incremental compilation too if you save and restore state to files.
Another solution would be to wrap around an entire system: it usually makes sense what packages are created by loading a system. Unhappily, ASDF does not make it easy at all to separate a system from its dependencies (though it's not conceptually impossible either).
But yes, I understand what you mean in general by tracking change. However, this is probably something you want to do as part of an ASDF extension, with a defmethod perform :around ((op load-op) (c cl-source-file)) so it affects your entire image, rather than a patch that adds your tracking :around-load to each and every system you use to use.
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org