[asdf-devel] Unexpected behavior when loading different versions of a system

dherring at tentpost.com dherring at tentpost.com
Fri Sep 2 17:25:24 UTC 2011

> On 9/1/11 Sep 1 -10:40 PM, Robert Goldman wrote:
> Here's the new problem:  when we reload Xach's foo system, we get a new
> definition with files "a" and "b."  Unfortunately, when ASDF reads this
> new definition, it first says "Oh, file a in system foo --- I have seen
> that before, and it's already loaded."  So when I tell ASDF to load foo
> (again), it says "a is already loaded, I need only load b."
> Unfortunately, that is not true --- the OLD "a" component is already
> loaded, but the NEW one has not been loaded.
> [Indeed, Faré and I had in the past discussed the possibility that when
> a new system definition for an existing system is loaded, we should
> simply regard the entire system as "dirty" and always rebuild everything
> in it.]
> This is a REALLY big change to the behavior of ASDF, so I would like to
> hear some comments before proposing a patch.

Makefiles handle this by checking timestamps between source and object
files.  Other build systems do this by checking hashes.  However, both
approaches rely on dependency tracking and assume that each output is
compiled in isolation and everything is relinked at the end.

In a serial CL process (all files loaded/compiled by the same image), the
presence or absence of a file may greatly affect all files visited after
it.  Thus given this interactive image model, I don't think any simple
option will work in all cases.  The current behavior is reasonable (modulo
where the files are found).

Thus, I wouldn't force a rebuild when the system definition changes, but a
rebuild might be deserved when the source location changes.

Isn't there an option to force rebuilding of all files in a system?  How
does that interact with Zach's case?

- Daniel

More information about the asdf-devel mailing list