[asdf-devel] long-standing bugs fixed in traverse

Faré fahree at gmail.com
Sun Dec 9 22:36:01 UTC 2012


Summary: ASDF 2.26.15 yet improved to allow a new vastly improved POIU 1.29.

Did you ever notice that ASDF did *not* correctly propagate timestamps?

On ASDF 1 and up to 2.26.8, If component A changes, and component B
depends on system A, but compilation stopped before B in a previous run,
then B may never be compiled again, even though a crucial change
in a macro in A would yield a different file. Phantom bugs!
This was fixed in 2.26.9, by teaching ASDF about timestamp propagation,
which was a major rewrite of the TRAVERSE internals.

I updated POIU to use those new internals, and the hell of debugging POIU
led me to making those internals painfully simple (within the constraints
of respecting the declared semantics) and obviously correct.
Also, many kludges were fixed in the internal dependency machinery.
Many methods to component-depends-on were refactored to do the Right Thing
where they weren't, and if you ever had problems with defining dependencies,
they will hopefully have vanished.
The infamous do-first is notably gone. Only in-order-to remains.

POIU now demonstrates how you can build alternate strategies to
plan a build and perform a plan — in this case, in parallel,
using an API that abstracts away the gory details dependency management.

To get dependencies right, I introduced a new notion, parent-op:
operations on a component depend on the parent-op of the parent
(unlike other operations, parent-op propagate
up the component hierarchy, not down).
This allow for the dependency graph to be actually correct,
rather than to rely on implicit details of the traversal and plan execution;
and this is also how POIU can build a complete graph of the dependencies,
without the previous ugly kluges (in case you ever wondered what
additional-dependencies was in the POIU sources).

I gutted away much of POIU, and found that I had to put back all the
pieces I had put away, albeit in a more organized way. Andreas Fuchs
obviously faced the same horror before me, except he didn't have the
luxury of being able to fix ASDF to get POIU working nicely with it.

I also fixed the a deadlock issue in POIU when trying to report
deferred warnings that do not fit in an OS pipe buffer: POIU now
uses files, not pipes, to communicate its results.

Anyway. POIU was an incredible HELL to debug, but here it is now.
Nothing should change for you, except that bugs have silently been squashed.

POIU has been tested to work with SBCL and single-threaded-CCL;
earlier versions kind of worked with CLISP, but this one looks like it won't.

Please test ASDF and POIU, tell me if they work for you,
and send me your feedback.

—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
Science is like sex: sometimes something useful comes out,
but that is not the reason we are doing it
	— Richard Feynman




More information about the asdf-devel mailing list