[asdf-devel] Ordering of system :depends-on elements

Faré fahree at gmail.com
Wed Jul 17 21:20:33 UTC 2013


On Wed, Jul 17, 2013 at 12:37 PM, Robert P. Goldman <rpgoldman at sift.info> wrote:
> I have seen the same phenomenon that Attila refers to, across different machines and different lisp implementations.
>
I remember having lots of issues with ASDF1 and ASDF2 in the past.
Hopefully, they are fixed with ASDF3.

> I had been chalking it up to differences in sorting and hash table behaviors.
>
I don't remember ASDF ever iterating over hash-tables, or using sort,
for the matter. It seems to me that ASDF has always been deterministic
in its traversal order, though its order hasn't always been quite
intuitive.

Now if you want actual non-determinism, try POIU in non-deterministic
mode (used to be the only option, now deterministic is the default and
the somewhat faster non-deterministic mode can be enabled by the
user). Of course, any determinism is dependent on the state of the
filesystem with respect to what was already successfully compiled, and
to your program not depending on the presence or absence of
compile-time side-effects that weren't in a proper eval-when.

> It can be annoying because, as Attila points out, the nondeterminism/partial order (in the sense that the algorithm as coded in CL does not uniquely determine a build order) can mask bugs in system dependency specification -- system definitions with missing dependencies can seem to work.
>
> I do not believe that this problem is acute enough to try to fix with explicit randomization, especially since the partial ordering is something ASDF exploits to minimize rebuilds.  I think it would be better to provide groveling support that supports programmers who wish to check/improve their system definitions. The cost of introducing explicit randomization in code complexity, need for repeated test runs, etc., seems like a bad trade-off.
>
> Actually, an ASDF variant that shuffles partially ordered components randomly, and repeatedly rebuilds, as a tool that one could run on a cloud service or something to check definitions might be a fun project.  But it's not something I think should go into core ASDF.
>
Of course, there is the solution provided by XCVB, of always building
each component from its declared dependencies only. A variant of ASDF
could use POIU-style forking to achieve the same effect. Or you could
use XCVB itself.

—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
You can learn many things from children.  How much patience you have,
for instance.
                — Franklin P. Jones



More information about the asdf-devel mailing list