Next: , Previous: , Up: The object model of ASDF   [Contents][Index]


7.1 Operations

An operation object of the appropriate type is instantiated whenever the user wants to do something with a system like

Operations can be invoked directly, or examined to see what their effects would be without performing them. There are a bunch of methods specialised on operation and component type that actually do the grunt work. Operations are invoked on systems via operate (see operate).

ASDF contains a number of pre-defined operation classes for common, and even fairly uncommon tasks that you might want to do with it. In addition, ASDF contains “abstract” operation classes that programmers can use as building blocks to define ASDF extensions. We discuss these in turn below.

Operations are invoked on systems via operate.

Generic function: operate operation component &rest initargs &key force force-not verbose &allow-other-keys
Generic function: oos operation component &rest initargs &key &allow-other-keys

operate invokes operation on system. oos is a synonym for operate (it stands for operate-on-system).

operation is a symbol that is passed, along with the supplied initargs, to make-operation (which will call make-instance) to create the operation object. component is a component designator, usually a string or symbol that designates a system, sometimes a list of strings or symbols that designate a subcomponent of a system.

The initargs are passed to the make-instance call when creating the operation object. Note that dependencies may cause the operation to invoke other operations on the system or its components: the new operations will be created with the same initargs as the original one.

If force is :all, then all systems are forced to be recompiled even if not modified since last compilation. If force is t, then only the system being loaded is forced to be recompiled even if not modified since last compilation, but other systems are not affected. If force is a list, then it specifies a list of systems that are forced to be recompiled even if not modified since last compilation. If force-not is :all, then all systems are forced not to be recompiled even if modified since last compilation. If force-not is t, then all systems but the system being loaded are forced not to be recompiled even if modified since last compilation (note: this was changed in ASDF 3.1.2). If force-not is a list, then it specifies a list of systems that are forced not to be recompiled even if modified since last compilation.

Both force and force-not apply to systems that are dependencies and were already compiled. force-not takes precedences over force, as it should, really, but unhappily only since ASDF 3.1.2. Moreover, systems the name of which is member of the set *immutable-systems* (represented as an equal hash-table) are always considered forced-not, and even their .asd is not refreshed from the filesystem.

To see what operate would do, you can use:

(asdf:traverse operation-class system-name)

Next: , Previous: , Up: The object model of ASDF   [Contents][Index]