On Thu, Mar 13, 2014 at 2:40 PM, Robert P. Goldman rpgoldman@sift.info wrote:
I'm a little concerned about making BUILD-OP be the default operation.
It seems to me that "BUILD" is not a good synonym for "LOAD," which is how BUILD-OP is currently interpreted.
I think the conventional interpretation of the word "build" would suggest to the user that
(build "foo-system")
would compile and NOT load "foo-system," instead of performing LOAD-OP as now. To me "build" does not connote "load."
Is this just me? What's the sense of the community?
BUILD is supposed to be a synonym for "whatever the user expects to do with this system", which for most / all existing systems is "load it", but for e.g. test systems might be "run the tests". It is also intended to allow for (primary or secondary) systems that are intended for something else than being loaded.
Example: asdf/defsystem itself has :build-operation monolithic-concatenate-source-op.
Now that ASDF3 has a sane action graph that isn't specialized only for compiling CL code (while being buggy at it), it can be used for other, arbitrary tasks. But requiring each user to know by name the operation for each such system is a pain, especially when these systems require build extensions to define their operation to begin with. Actually, I see that :build-operation has the same bug as :class used to have in presence of defsystem-depends-on, and build-op needs to do things similar to asdf/parse-defsystem::class-for-type to be useful in this context.
Thus, if anyone uses ASDF to specify say the building of document, using foo-doc:document-op, the corresponding system would be (defsystem my-document :defsystem-depends-on (foo-doc) :build-operation "foo-doc:document-op" :components (...))
Or for shell scripts: (defsystem my-makefile :defsystem-depends-on (asdf-make) :build-operation "asdf-make:run-op" :components ((:target "all" :depends-on ("my-program")) (:target "clean" :command "git clean -xfd") (:target "tarball" :depends-on ("clean") :command "tar zcvf ...") ...)))
Getting build-op right is necessary to enable such uses. And you don't want users to remember that they need to (asdf:oos 'foo-doc:document-op :mydocument) but (asdf:oos 'asdf-make:run-op :my-makefile) which is even worse since the foo-doc and asdf-make packages might not even exist at this point.
Usability demands an asdf:build function. The name may vary, but shorter is better. asdf:b or asdf:bnm (build 'n' munge?) might do, too.
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org Beware of altruism. It is based on self-deception, the root of all evil. — Robert Heinlein, "Time Enough For Love"