[asdf-devel] :depends-on to load-system or require-system?

Robert Goldman rpgoldman at sift.net
Tue Sep 3 20:51:04 UTC 2013


John Morrison wrote:
> Hi All;
>
> tl:dr - AFAICT post-version-2.26-ish versions of ASDF systems listed
> in :depends-on are unconditionally loaded rather than required - ditto
> for asdf:load-system.  If this is correct (both in intent and my
> understanding), then how to create a GUI for quicklisp in McCLIM which
> can quickload any system which :depends-on McCLIM?
>
> Apologies in advance in the likely event this is Pilot Error.
>
> Am trying to write a gui
> <https://bitbucket.org/symbolicsimulation/com.symsim.oss.ql-gui> for
> quicklisp.  Testing on various platforms (Raspberry Pi, linux/SBCL,
> linux/CCL) with various vintages of ASDF produces differing behavior. 
> In particular, quickloading a system which depends upon McCLIM from
> the McCLIM-based gui screws up (I haven't tracked down the exact
> problem, but I could understand why unconditionally reloading McCLIM
> while it's running could get weird).
>
> After some digging (and rebuilding various versions of SBCL up to
> 1.1.9), I got as far as seeing asdf:load-system behavior diverging
> from 2.26 (SBCL 1.0.9) to both 2.32 (CCL 1.9) and 3.0.2 (both SBCL and
> CCL).  AFAICT 2.26 load-system does not unconditionally load an
> already-loaded system (behaving like and perhaps redundant to
> asdf:require-system).  2.32 and 3.0.2 load-system unconditionally load
> systems, and require-system does not.  I think I understand why the
> newer vintages do this.
>
> The issue for me is loading systems that :depend-on McCLIM from inside
> a McCLIM frame command.  In my naivety, I would think that the
> :depends-on systems should be required rather than loaded (if you've
> patched them, say, you wouldn't want the patch hammered).  For my own
> stuff, I guess I could require prerequisite systems within the asd
> file rather than :depending-on them, but this seems wrong (breaks
> introspection?) - so wrong I feel I may be going about this entirely
> the wrong way.
>
> Would anybody please be so kind as to throw some advice my way?
>
> -jm
>

ASDF:REQUIRE-SYSTEM uses :FORCE-NOT to prevent ASDF from reloading any of the parent systems that have changed.

But LOAD-SYSTEM should not *unconditionally* load parent systems, unless :FORCE is used, or those systems have changed.

Is it possible that something is happening in your interaction with QUICKLISP to cause ASDF to mistakenly believe some of these upstream parts of McCLIM have changed?

Another possibility: the McCLIM ASDF structure is *very* complicated because of the back-ends, which cannot be modeled happily in ASDF, because ASDF isn't great about modeling conditional structure in environmental dependencies.  [IMO, really McCLIM should have used LOAD-SYSTEM keywords to allow the loader to specify backends.  But that's water under the bridge now...]  Perhaps some aspect of this complex structure causes ASDF to mistakenly believe something needs reloading.

best,
r






More information about the asdf-devel mailing list