[asdf-devel] Module dependencies still arguably wrong

Robert Goldman rpgoldman at sift.info
Wed Feb 10 21:44:49 UTC 2010


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





More information about the asdf-devel mailing list