[asdf-devel] ASDF traverse changed behavior?

Robert Goldman rpgoldman at sift.info
Wed Mar 17 13:28:24 UTC 2010


On 3/17/10 Mar 17 -4:33 AM, Juan Jose Garcia-Ripoll wrote:
> 
> 
> On Wed, Mar 17, 2010 at 9:58 AM, Juan Jose Garcia-Ripoll
> <juanjose.garciaripoll at googlemail.com
> <mailto:juanjose.garciaripoll at googlemail.com>> wrote:
> 
>     Before, if an operation defined by me, such as LIB-OP, did not
>     traverse a system, then the only operation we got was that operation
>     applied on the system, as a generic object.
> 
>     Now TRAVERSE not only imposes the LIB-OP operation on the system,
>     but it also scans the components and imposes the operation on the
>     components. 
> 
> 
> Instead of having TRAVERSE use  some kind of hard-coded logic as it does now
> 
>             (let ((module-ops
>                    (when (typep c 'module)
> [...]
>                        (dolist (kid (module-components c))
>                            (handler-case
> 
> why not go back to something more reasonable which is based on
> COMPONENT-DEPENDS-ON
> 
> (defmethod component-depends-on ((o operation) (c system))
>   ...)
> 

I tried to come up with a cleaner method when I rewrote TRAVERSE to fix
the module dependency bug.  I couldn't find a way to do this.

The short answer is that the problem comes from the way ASDF uses MODULE
components to represent two different things at once:

1.  The operation to be done on the module as a whole (including the
operation done on its children) and

2.  Any clean up operations that don't live on a component (let's say
you want to write an entry in a table after a module is combined).

Recall that PERFORM applied to a module is done AFTER any operations on
the component's children.  Similarly, OPERATION-DONE-P on the module
pays no attention to whether the children are done, nor does
OPERATION-DONE-P in general pay any attention to the dependencies.

If you think THIS bug fix was bad for backward compatibility, believe
me, doing something "more reasonable" would make your head swim!

That said, if you have a better patch, feel free to provide it.  Other
than that, I discussed this on the list till I was blue in the face
while the modifications were underway.  This will be my last message on
the subject; please read over the archive of the list to see why
TRAVERSE was modified in the way it was.  If you have any remaining
questions, I will be happy to entertain them, but I am not going over
this ground again.

Best,
R




More information about the asdf-devel mailing list