Hi Robert;
Thanks for the advice and suggestions for where to start looking. I will get out the software shovel and start digging, and I shall report back.
Thanks again!
-jm
On Tuesday 03 September 2013 15:51:04 Robert Goldman wrote:
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