Previous Section | Next Section | Table of Contents | Glossary | Index |
As it's distributed, Clozure CL starts up with *PACKAGE* set to the CL-USER package and with most predefined functions and methods protected against accidental redefinition. The package setting is of course a requirement of ANSI CL, and the protection of predefined functions and methods is intended to catch certain types of programming errors (accidentally redefining a CL or CCL function) before those errors have a chance to do much damage.
These settings may make using Clozure CL to develop Clozure CL a bit awkward, because much of that process assumes you are working in the CCL package is current, and a primary purpose of Clozure CL development is to redefine some predefined, builtin functions. The standard, "routine" ways of building Clozure CL from sources (see ) - COMPILE-CCL, XCOMPILE-CCL, and XLOAD-LEVEL-0 - bind *PACKAGE* to the "CCL" package and enable the redefinition of predefined functions; the symbols COMPILE-CCL, XCOMPILE-CCL, and XLOAD-LEVEL-0 are additionally now exported from the "CCL" package.
Some other (more ad-hoc) ways of doing development on Clozure CL—compiling and/or loading individual files, incrementally redefining individual functions—may be awkward unless one reverts to the mode of operation which was traditionally offered in Clozure CL. Some Clozure CL source files - especially those that comprise the bootstrapping image sources and the first few files in the "cold load" sequence - are compiled and loaded in the "CCL" package but don't contain (IN-PACKAGE "CCL") forms, since IN-PACKAGE doesn't work until later in the cold load sequence.
The somewhat bizarre behavior of both SET-USER-ENVIRONMENT and SET-DEVELOPMENT-ENVIRONMENT with respect to the special variables they affect is intended to allow those constructs to take effect when the read-eval-print loop next returns to a top-level '? ' prompt; the constructs can meaningfully be used inside LOAD, for instance (recall that LOAD binds *PACKAGE*), though using both constructs within the same LOAD call would likely be pretty confusing.
"user" and "development" are otherwise very generic terms; here they're intended to enforce the distinction between "using" Clozure CL and "developing" it.
The initial environment from which Clozure CL images are saved is one where (SET-USER-ENVIRONMENT T) has just been called; in previous versions, it was effectively as if (SET-DEVELOPMENT-ENVIRONMENT T) had just been called.
Hopefully, most users of Clozure CL can safely ignore these issues most of the time. Note that doing (SET-USER-ENVIRONMENT T) after loading one's own code (or 3rd-party code) into Clozure CL would protect that code (as well as Clozure CL's) from accidental redefinition; that may be useful in some cases.
Previous Section | Next Section | Table of Contents | Glossary | Index |