Next: Components, Previous: The object model of asdf, Up: The object model of asdf

### 3.1 Operations

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

- compile all its files
- load the files into a running lisp environment
- copy its source files somewhere else

Operations can be invoked directly, or examined to see what their effects would be without performing them. FIXME: document how! There are a bunch of methods specialised on operation and component type that actually do the grunt work.

The operation object contains whatever state is relevant for this purpose (perhaps a list of visited nodes, for example) but primarily is a nice thing to specialise operation methods on and easier than having them all be EQL methods.

Operations are invoked on systems via `operate`.

— Generic function: operate operation system &rest initargs
— Generic function: oos operation system &rest initargs

> `operate` invokes operation on system. `oos` is a synonym for `operate`.

> operation is a symbol that is passed, along with the supplied initargs, to `make-instance` to create the operation object. system is a system designator.

> 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.