rpgoldman at sift.net
Tue Jul 14 21:29:30 UTC 2015
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
> 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
More information about the asdf-devel