[asdf-devel] Reader conditionals in :depends-on considered harmful?
Robert P. Goldman
rpgoldman at sift.info
Sun Dec 8 03:57:48 UTC 2013
Dave Cooper wrote:
> Is stuff like the following advised/recommended?
> (asdf:defsystem #:robot
> :description "The Gendl™ Simplified Android Robot example "
> :depends-on (#-gendl :gendl)
> ... )
> The scenario is that we ship a pre-built Gendl image which has no asdf
> or Quicklisp in it (but does, of course, have :gendl included in
> Downstream user is then free to load Quicklisp and start pulling in
> libraries. But if they pull a library (or application, like :robot),
> which normally should depend-on :gendl, then we don't want it trying to
> reload the whole gendl system, since it's already built in.
> I know this was discussed here briefly around the launch of 3.0.3 but
> I'm still not completely clear on how it should work. If we don't
> include ASDF and Quicklisp at all in our pre-built image, then I don't
> see any way for us to tamper with e.g. asdf's registry search functions.
> I guess the only way to do that would be to provide a custom function
> for installing Quicklisp and ASDF -- but we have no guarantee that the
> user will actually follow our function and not simply try to install
> Quicklisp according to the instructions at quicklisp.org
I think it's fair to say that there are differences of opinion about this.
One school of thought would deprecate these, favoring a declarative
syntax for ASDF:DEFSYSTEM. They wouldn't like such use of reader macros
because it "hides" information from ASDF.
I am of a more pragmatic school that thinks these are fine. While I
like declarative systems when possible, I'm not convinced that they are
always realizable. I have a case very similar to yours where I have
done exactly the same thing and put a #-<system> <system> in
:depends-on, because ASDF does not correctly detect that <system> need
not be reloaded in the prebuilt image we have. It's particularly an
issue for us since the system in question *cannot* be loaded twice: if
you attempt to do so, it compromises the state of the lisp image so that
it is no longer usable.
More information about the asdf-devel