On 7/14/15 Jul 14 -3:58 PM, Dave Cooper wrote: > > > > > if it's still feasible i suggest to replace REGISTER-IMMUTABLE-SYSTEM > > with (SETF SYSTEM-MUTABLE-P) and stop exporting *IMMUTABLE-SYSTEMS*. > > > I think it's too late to make changes for 3.1.5. > > Indeed, it's probably a bad idea to export *IMMUTABLE-SYSTEMS*. Maybe > to late to fix in 3.1.5, but hopefully will be fixed in 3.2. > > "Ask not what the government can do for you. Ask what the government > is doing > to you." — David Friedman, "The Machinery of Freedom", p. 21 > > > > I think either way will work for us, but if register-immutable-system > goes away, it will mean an application code change for us. We are not > accessing *immutable-sytems* directly, so no worries there whether it's > exported or not. > > We do call register-immutable-systems, however. > > For the record, here is how we are using it: > > > We make pre-built Gendl or Genworks GDL distributions which do not > include any ASDF or Quicklisp at all, but they are built with > monolithic-compile-bundles generated using asdf in our build environment. > > For downstream users of prebuilt distributions who then want to load > ASDF and Quicklisp, we provide a function, "load-quicklisp," which we > ask users to call, rather than directly loading the quicklisp/setup.lisp > themselves. > > This function takes a :path keyword argument which defaults to the > location of the quicklisp/ directory which we ship with our system. So > if the user wants to use a different quicklisp/ directory (unsupported > by us if they pick a different quicklisp version than what we built with > and shipped), they can do it with that :path argument. The more usual > case is that they copy our shipped quicklisp/ directory into a location > where they have write access, because they want to put stuff into its > local-projects/ or do other things which require write-access to the > quicklisp/ directory. > > The :path binds the dynamic variable *quicklisp-home*, as used in the > following code: > > > > (load (merge-pathnames "setup.lisp" *quicklisp-home*)) > > (defclass asdf::gdl (asdf::cl-source-file) ((type :initform "gdl"))) > (defclass asdf::gendl (asdf::cl-source-file) ((type :initform "gendl"))) > (defclass asdf::lisp (asdf::cl-source-file) ()) > > (let ((preloaded gdl::*already-loaded-systems*)) > (dolist (system preloaded) > (asdf/find-system:register-immutable-system system))) > > > > So as you can see, we maintain a variable gdl::*already-loaded-systems* > (which probably ought to be exported, now that I mention it), which is > used to establish the immutable-systems upon loading of quicklisp and > asdf into the prebuilt image. And we do a few other extra initialization > things after loading the quicklisp/setup.lisp. >
I'm inclined to remove the export of *IMMUTABLE-SYSTEMS*. It hasn't been used in a released version of ASDF AFAIK, so it seems benign to remove it. Cheers, r