December 7th 2005 #
random, December 7th 2005
Proposed ASDF Change
Mostly as seen on cclan-list and sbcl-devel:
Currently ASDF traverses *CENTRAL-REGISTRY* head-to-tail: new locations pushed to the front take precendence and older ones serve as fallbacks. The behaviour undocumented.
I believe that this is an unfortunate design as it means that a seemingly innocent PUSH can lead to totally different set of libraries being loaded as would be without. The system is unstable: a single idiomatic operation can have large and impossible to predict consequences.
I would like to change ASDF to traverse *CENTRAL-REGISTRY* tail to head instead, so that
(PUSH <DIR> *CENTRAL-REGISTRY*)can only make a previously failing
(OOS 'LOAD-OP <SYSTEM>)succeed, but not alter the behaviour of a succeeding operation. Locations pushed to the head would become fallbacks instead of overrides. Users needing to override things could still append to the end of the list, but that being a much more uncommon operation the danger of accidentally overriding eg. vendor-provided packages with local ones would be greatly reduced.*
This would cause migration work for people whose setups deliberately operate on the head or tail already. However, I doubt this is much depended on outside personal initialization files since the current behaviour is not only undocumented but unstable.
So let's hear it: yay or nay?
* This is the specific case I'm trying to solve, really: working out how to distribute SBCL (not an application built with it, but SBCL itself) bundled with a number of libraries so that it can coexist with other versions of SBCL and the bundled libraries installed on the same system, with minimum pain for the user, while remaining fairly robust in the face of moderate environmental customization.