Hi phoebe,
[[PGP Signed Part:Undecided]] I'll still get the warnings (even with one new warning: "No dependency propagating scheme specified..."):
Perhaps it was imprecise of me to say that defining a method on COMPONENT-DEPENDS-ON will prevent the deprecation warning. Causing the default method to be invoked on an OPERATION that is not a direction-OPERATION is deprecated; defining a more specific method which does CALL-NEXT-METHOD still invokes the deprecated behavior.
What I meant was subclassing ASDF:OPERATION only
You can subclass OPERATION without a direction-OPERATION, but you have to completely override COMPONENT-DEPENDS-ON with your own behavior, never invoking the built-in method. I strongly recommend against doing this.
So, all operations are by default downward and sideway unless they are subclass of (OR DOWNWARD-OPERATION UPWARD-OPERATION SIDEWAY-OPERATION SELFWARD-OPERATION NON-PROPAGATING-OPERATION)
Er... I'm not comfortable with saying that. In ASDF 2, all operations behaved in a way that is now called being downward and sideway. ASDF 3 treats operations which don't specify their dependency relationship in a way compatible with ASDF 2 to give maintainers a chance to update old extensions. The beautiful dream is that, one day, the compatibility behavior will be replaced with a hard error. Please do not treat the compatibility behavior as a part of ASDF 3's interface.
From our exchange, I think its safe to summarise into this table:
"Table of ASDF operation classes to subclass and the corresponding methods to define on your custom class."
| | OPERATION | <direction>-OPERATION | *-op | |----------------------+------------+--------------------------+------| | perform | X | X | X | | component-depends-on | X (note 1) | | | | input-files | X | (Depending on your need) | | | output-files | X | (Depending on your need) | |
Note 1: You have to completely override COMPONENT-DEPENDS-ON for your custom class without invoking (CALL-NEXT-METHOD).
As a new ASDF extension writer, I think having a table like this helps a lot to easily getting started.
Is it a linear chain or a "network chain" of operations?
The latter. When you define a subclass of SELFWARD-OPERATION, you specify what other operation(s) it is selfward to by overriding the :INITFORM of the slot SELFWARD-OPERATION. The value you provide may be either a single operation designator, or a list of operation designators. For example, (LOAD-OP COMPONENT) depends on both (COMPILE-OP COMPONENT) and (PREPARE-OP COMPONENT), so its SELFWARD-OPERATION slot is defined:
(selfward-operation :initform '(prepare-op compile-op) :allocation :class)
can be done in parallel,
But how can I express the operation dependencies such that ASDF knows PRINT-OP depends on ECHO-OP?
(defclass print-op (asdf:selfward-operation) ((asdf:selfward-operation :initform 'echo-op :allocation :class)))
Thanks! I have tried it out and it works. Still need some time to understand its behaviour though.
ASDF as it exists now is not capable of running anything in parallel. Faré has an experimental project to do this, called POIU, but I can't speak for its status. Until very recently, SBCL was incapable of compiling files in parallel, and still today, lots of code does not-thread-safe stuff at load-time, so I'm not convinced it's practically possible to make ASDF parallel via shared-memory threaded concurrency. I believe POIU compiles each component in a separate process, then loads them sequentially.
I see, that's good to know. At least it's an implementation limitation and not a design limitation I guess.
ASDF as it exists now is not capable of running anything in parallel.
Faré has an experimental project to do this, called POIU, but I
can't speak for its status. Until very recently, SBCL was incapable of
compiling files in parallel, and still today, lots of code does
not-thread-safe stuff at load-time, so I'm not convinced it's
practically possible to make ASDF parallel via shared-memory threaded
concurrency. I believe POIU compiles each component in a separate
process, then loads them sequentially.
I see, that's good to know. At least it's an implementation limitation and not a design limitation I guess.
POIU compiles files in a fork, on supported implementations that it knows how to fork on (SBCL, CCL with a patch, CLISP, ACL). It used to work well, but it wasn't updated to take into account the new planning infrastructure of ASDF 3.3, and requires some love. It looks like it's still working, but it's probably not doing all the right things across build phases. Good luck untangling it.
-#f