Earlier I claimed that the new ASDF TRAVERSE computed a conservative
approximation to what needed to be recompiled. In particular, if we have
(defsystem X
:depends-on (Y)
....)
With the new patch, if we do load-op on X, and Y has changed, X will be
recompiled.
In Classic ASDF, this would not happen.
However, even with the new patch, this does not happen correctly.
In particular, this case will not work properly
(defsystem X
:depends-on (Y)
...)
(defsystem Z
:depends-on (Y)
...)
Let's imagine I load X and Z, which causes me to load Y.
Now I modify some of the code of Y and reload X. ASDF will notice the
change in Y and trigger a recompilation of X.
BUT if I now (asdf:load-system :z), when we check the dependencies of Z
and find Y, there will be nothing that needs to be done for Y, so
recompilation of Z will /not/ be triggered.
So the problem with trying to do a conservative estimation of what needs
to be recompiled is that we don't store with a system object information
about the state of things upon which it depends, so we cannot detect a
change in the state of those dependencies.....
Information about the last compilation of a system /is/ available in
ASDF, but we don't store with X and Z information about the state of Z
when they were compiled.
To open YA can of worms, we also don't cache information about systems
*across lisp sessions*. But I think I'll just raise that issue and then
drop it like a hot potato.
Cheers,
r