[asdf-devel] asdf bundle and do-first

Faré fahree at gmail.com
Thu Jan 3 08:08:25 UTC 2013


Dear CL hackers,

this issue with needed-in-image vs not dependencies is solved in
2.26.51; a new refactoring of traverse was required, which led to new
simplifications afterwards. It's simpler than ever despite doing more
(and more correctly) than ever — see function traverse-action for the
substance. POIU was updated, and once again, making POIU work helped
make the ASDF code much better, and once again, some of antifuchs'
code that I had once deleted anticipated things I ended up needing.

I *really* hope 2.27 will be the last deep refactoring of ASDF
internals that's ever needed.

Now I'll go back to fixing any ASDF client that depends on obsolete
behavior so I may release at long last. I hope this release can then
make it to ECL, killing asdf-bundle and asdf-ecl, as well as to other
implementations.

PS: For very bad reasons, I resurrected the GCL 2.6 port, which sadly
is lacking support for output-translations (lack for
pathname-match-p).

—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
When you've seen one nuclear war, you've seen them all.

On Mon, Dec 31, 2012 at 12:57 PM, Faré <fahree at gmail.com> wrote:
> Another conceptual bug in ASDF.
>
> Checking the plans generated for load-fasl-op, I find that with my new
> ASDF 2.26.x (currently x=45), it systematically loads all the
> individual .fasl's before it loads the .system.fasl, defeating the
> purpose.
>
> This was not the case before: in 2.26.7 and earlier, the (separately
> distributed before 2.26.7) asdf-bundle has load-fasl-op depend-on
> fasl-op which depends-on compile-op, which doesn't depend-on load-op,
> but do-first's on it — so that the dependency is only considered but
> if the immediate timestamp of the fasl is older than the timestamp of
> its lisp source. If all fasl's satisfy this local timestamp check,
> nothing is recompiled, none of the do-first is triggered, and the
> load-op's are not attempted. But the old design also fails to
> propagate timestamp information from the other files that are
> depended-on, let alone do-firsted. Therefore, there is some notion in
> the old do-first that must be preserved in the new ASDF, even though
> the previous design was conceptually flawed overall.
>
> In the end, what must be preserved is that some dependencies need to
> have been performed in the current image, whereas other dependencies
> only need to have been performed in some previous (or current) image.
> This means a dependency can be walked over twice: once in without
> "image-necessity", and a second time with it. Without image-necessity,
> only the timestamp matters; with image-necessity, whether it was
> performed in current image matters, too. Presumably, a node with
> output-files clears the image-necessity flag before checking
> timestamps, but re-traverses its dependencies with the flag if the
> timestamp check fails. A node with no output-files on the other hand
> is done for in-image effect, and heeds and propagates the
> image-necessity flag to its subnodes. I believe that it's possible to
> continue the current strategy of traversal without an explicit graph,
> though nodes may now be traversed twice: once without image-necessity,
> once with. Sigh.
>
> —♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
> Success is getting what you want. Happiness is wanting what you get.
>         — Dale Carnegie




More information about the asdf-devel mailing list