123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656 |
- % -*- Mode: TeX -*-
- %!!! Barmar: Tell me why multiple packags are needed.
- % e.g., to prevent variable and function conflicts.
- \beginsubSection{Introduction to Packages}
- %% 10.0.0 7
- %% 11.0.0 4
- A \newterm{package} establishes a mapping from names to \term{symbols}.
- At any given time, one \term{package} is current.
- The \newterm{current package} is the one that is \thevalueof{*package*}.
- When using the \term{Lisp reader},
- it is possible to refer to \term{symbols} in \term{packages}
- other than the current one through the use of \term{package prefixes} in the
- printed representation of the \term{symbol}.
- %% 11.2.0 5
- \Thenextfigure\ lists some \term{defined names} that are applicable
- to \term{packages}.
- %Shouldn't be needed. This info is all explicit now. -kmp 29-Apr-91
- % For the \term{operators} listed here, all optional arguments named
- % \param{package} default to the \term{current package}.
- Where an \term{operator}
- takes an argument that is either a \term{symbol} or a \term{list}
- of \term{symbols},
- an argument of \nil\ is treated as an empty \term{list} of \term{symbols}.
- Any \param{package} argument may be either a \term{string}, a \term{symbol}, or
- a \term{package}. If a \term{symbol} is supplied, its name will be used
- as the \term{package} name.
- \issue{REQUIRE-PATHNAME-DEFAULTS:ELIMINATE}
- % \funref{provide}, \funref{require}, and \varref{*modules*} will
- % be removed from this table (and the language).
- %PROVIDE and REQUIRE need to be removed, right? -kmp 29-Apr-91
- %Nope! -kmp 13-Feb-92
- \displaythree{Some Defined Names related to Packages}{
- *modules*&import&provide\cr
- *package*&in-package&rename-package\cr
- defpackage&intern&require\cr
- do-all-symbols&list-all-packages&shadow\cr
- do-external-symbols&make-package&shadowing-import\cr
- do-symbols&package-name&unexport\cr
- export&package-nicknames&unintern\cr
- find-all-symbols&package-shadowing-symbols&unuse-package\cr
- find-package&package-use-list&use-package\cr
- find-symbol&package-used-by-list&\cr
- }
- \endissue{REQUIRE-PATHNAME-DEFAULTS:ELIMINATE}
- \beginsubsubsection{Package Names and Nicknames}
- %% 11.0.0 19
- Each \term{package} has a \term{name} (a \term{string}) and perhaps some \term{nicknames}
- (also \term{strings}).
- These are assigned when the \term{package} is created and can be changed later.
- %% 11.0.0 20
- There is a single namespace for \term{packages}.
- \Thefunction{find-package} translates a package
- \term{name} or \term{nickname} into the associated \term{package}.
- \Thefunction{package-name} returns the \term{name} of a \term{package}.
- \Thefunction{package-nicknames} returns
- a \term{list} of all \term{nicknames} for a \term{package}.
- \funref{rename-package} removes a \term{package}'s
- current \term{name} and \term{nicknames} and replaces them with new ones
- specified by the caller.
- \endsubsubsection%{Package Names and Nicknames}
- \beginsubsubsection{Symbols in a Package}
- \beginsubsubsubsection{Internal and External Symbols}
- %% 11.0.0 5
- The mappings in a \term{package} are divided into two classes, external and internal.
- The \term{symbols} targeted by these different mappings
- are called \term{external symbols} and \term{internal symbols}\idxterm{internal symbol} of the
- \term{package}. Within a \term{package}, a name refers to one
- \term{symbol} or to none; if it does refer
- to a \term{symbol}, then it is either external or internal in that
- \term{package}, but not both.
- %% 11.0.0 6
- \newtermidx{External symbols}{external symbol}
- are part of the package's public interface to other \term{packages}.
- \term{Symbols} become \term{external symbols} of a given
- \term{package} if they have been \term{exported} from that \term{package}.
- %% 11.0.0 7
- A \term{symbol} has the same \term{name} no matter what \term{package}
- it is \term{present} in, but it might be an \term{external symbol} of some \term{packages}
- and an \term{internal symbol} of others.
- \endsubsubsubsection%{Internal and External Symbols}
- \beginsubsubsubsection{Package Inheritance}
- %% 11.0.0 9
- \term{Packages} can be built up in layers. From one point of view,
- a \term{package} is a single collection
- of mappings from \term{strings} into \term{internal symbols} and
- \term{external symbols}.
- However, some of these mappings might be established within the \term{package}
- itself, while other mappings are inherited from other \term{packages}
- via \funref{use-package}.
- A \term{symbol} is said to be \newterm{present} in a \term{package}
- if the mapping is in the \term{package} itself and is
- not inherited from somewhere else.
- %% 11.4.0
- There is no way to inherit the \term{internal symbols} of another \term{package};
- to refer to an \term{internal symbol} using the \term{Lisp reader},
- a \term{package} containing the \term{symbol}
- must be made to be the \term{current package},
- a \term{package prefix} must be used,
- or the \term{symbol} must be \term{imported} into the \term{current package}.
- \endsubsubsubsection%{Package Inheritance}
- \beginsubsubsubsection{Accessibility of Symbols in a Package}
- A \term{symbol} becomes \newterm{accessible} in a \term{package}
- if that is its \term{home package} when it is created,
- or if it is \term{imported} into that \term{package},
- or by inheritance via \funref{use-package}.
- If a \term{symbol} is \term{accessible} in a \term{package},
- it can be referred to when using the \term{Lisp reader}
- without a \term{package prefix} when that \term{package} is the \term{current package},
- regardless of whether it is \term{present} or inherited.
- %???Move the following to \secref\Syntax???
- %A \term{symbol} will not necessarily always have the same
- %printed representation because the way \term{symbols} are printed
- %depends on whether or not they are \term{accessible} in the \term{current package}.
- %% 11.0.0 35
- \term{Symbols} from one \term{package} can be made \term{accessible}
- in another \term{package} in two ways.
- %% 11.0.0 36
- \beginlist
- \itemitem{--}
- Any individual \term{symbol} can be added to a \term{package} by use
- of \funref{import}. After the call to \funref{import} the
- \term{symbol} is \term{present} in the importing \term{package}.
- The status of the \term{symbol} in the \term{package}
- it came from (if any) is unchanged, and the \term{home package} for
- this \term{symbol} is unchanged.
- Once \term{imported}, a \term{symbol} is \term{present} in the
- importing \term{package}
- and can be removed only by calling \funref{unintern}.
- %% 11.4.0 4
- A \term{symbol} is \term{shadowed}\meaning{3} by another \term{symbol}
- in some \term{package} if the first \term{symbol} would be \term{accessible}
- by inheritance if not for the presence of the second \term{symbol}.
- See \funref{shadowing-import}.
- %% 11.4.0 39
- %% 11.4.0 40
- \itemitem{--}
- The second mechanism for making \term{symbols} from one \term{package}
- \term{accessible} in another is provided by \funref{use-package}.
- All of the \term{external symbols} of the used \term{package} are inherited
- by the using \term{package}.
- \Thefunction{unuse-package} undoes the effects of a previous \funref{use-package}.
- \endlist
- \endsubsubsubsection%{Accessibility of Symbols in a Package}
- \beginsubsubsubsection{Locating a Symbol in a Package}
- %% 11.4.0 8
- When a \term{symbol} is to be located in a given \term{package}
- the following occurs:
- \beginlist
- \itemitem{--} The \term{external symbols} and \term{internal symbols} of the
- \term{package} are searched for the \term{symbol}.
- \itemitem{--} The \term{external symbols} of the used \term{packages} are
- searched
- in some unspecified order. The
- order does not matter; see the rules for handling name
- conflicts listed below.
- \endlist
- \endsubsubsubsection%{Locating a Symbol in a Package}
- \beginsubsubsubsection{Prevention of Name Conflicts in Packages}
- %% 11.0.0 46
- Within one \term{package}, any particular name can refer to at most one
- \term{symbol}. A name conflict is said to occur when there would be more than
- one candidate \term{symbol}. Any time a name conflict is about to occur,
- a \term{correctable} \term{error} is signaled.
- The following rules apply to name conflicts:
- %% 11.0.0 47
- \beginlist
- %% 11.0.0 49
- \itemitem{--}
- Name conflicts are detected when they become possible, that is, when the
- package structure is altered. Name
- conflicts are not checked during every name lookup.
- \itemitem{--}
- If the \term{same} \term{symbol} is \term{accessible} to a \term{package}
- through more than one path, there is no name conflict.
- A \term{symbol} cannot conflict with itself.
- Name conflicts occur only between \term{distinct} \term{symbols} with
- the same name (under \funref{string=}).
- %% 11.0.0 48
- \itemitem{--} Every \term{package} has a list of shadowing \term{symbols}.
- A shadowing \term{symbol} takes precedence over any other \term{symbol} of
- the same name that would otherwise be \term{accessible} in the \term{package}.
- A name conflict involving a shadowing symbol is always resolved in favor of
- the shadowing \term{symbol}, without signaling an error (except for one
- exception involving \funref{import}).
- See \funref{shadow} and \funref{shadowing-import}.
- %% 11.0.0 50
- \itemitem{--}
- The functions \funref{use-package}, \funref{import}, and
- \funref{export} check for name conflicts.
- %% 11.0.0 52
- \itemitem{--}
- \funref{shadow} and \funref{shadowing-import}
- never signal a name-conflict error.
- %% 11.0.0 53
- \itemitem{--}
- % \funref{unuse-package}, \funref{unexport}, and \funref{unintern}
- % (when the \term{symbol} being uninterned is not a \term{shadowing symbol})
- % do not need to do any name-conflict checking.
- %% Rewording for JonL:
- \funref{unuse-package} and \funref{unexport}
- do not need to do any name-conflict checking.
- \funref{unintern} does name-conflict checking only when a \term{symbol}
- being \term{uninterned} is a \term{shadowing symbol}\idxterm{shadowing symbol}.
- %% 11.0.0 54
- \itemitem{--}
- Giving a shadowing symbol to \funref{unintern}
- can uncover a name conflict that had
- previously been resolved by the shadowing.
- %% 11.0.0 55
- %\itemitem{--}
- %Aborting from a name-conflict error leaves the original \term{symbol}
- %\term{accessible}.
- \itemitem{--}
- Package functions signal name-conflict errors \oftype{package-error} before making any
- change to the package structure. When multiple changes are to be made,
- it is
- permissible for the implementation to process each change separately.
- For example, when \funref{export} is given a
- \term{list} of
- \term{symbols},
- aborting from a name
- conflict caused by the second \term{symbol}
- in the \term{list} might still export the
- first \term{symbol} in the \term{list}.
- However, a name-conflict error caused by \funref{export}
- of a single \term{symbol} will be signaled before
- that \term{symbol}'s \term{accessibility} in any \term{package} is changed.
- %% 11.0.0 56
- \itemitem{--}
- Continuing from a name-conflict error must offer the user a chance to
- resolve the name conflict in favor of either of the candidates. The
- \term{package}
- structure should be altered to reflect the resolution of the
- name conflict, via \funref{shadowing-import},
- \funref{unintern},
- %!!! Barmar: The next two bullets don't mention "unexport".
- or \funref{unexport}.
- %% 11.0.0 57
- \itemitem{--}
- A name conflict in \funref{use-package} between a \term{symbol}
- %directly
- \term{present} in the using \term{package} and an \term{external symbol} of the used
- \term{package} is resolved in favor of the first \term{symbol} by making it a
- shadowing \term{symbol}, or in favor of the second \term{symbol} by uninterning
- the first \term{symbol} from the using \term{package}.
- %% 11.0.0 60
- \itemitem{--}
- A name conflict in \funref{export} or \funref{unintern}
- due to a \term{package}'s inheriting two \term{distinct} \term{symbols}
- with the \term{same} \term{name} (under \funref{string=})
- from two other \term{packages} can be resolved in
- favor of either \term{symbol} by importing it into the using
- \term{package} and making it a \term{shadowing symbol}\idxterm{shadowing symbol},
- just as with \funref{use-package}.
- \endlist
- \endsubsubsubsection%{Prevention of Name Conflicts in Packages}
- \endsubsubsection%{Symbols in a Package}
- \endsubSection%{Introduction to Packages}
- \beginsubSection{Standardized Packages}
- %% 11.6.0 1
- This section describes the \term{packages} that are available
- in every \term{conforming implementation}. A summary of the
- \term{names} and \term{nicknames} of those \term{standardized} \term{packages}
- is given in \thenextfigure.
- \tablefigtwo{Standardized Package Names}{Name}{Nicknames}{
- \packref{common-lisp}&\packref{cl}\cr
- \packref{common-lisp-user}&\packref{cl-user}\cr
- \packref{keyword}&\i{none}\cr
- }
- \issue{LISP-PACKAGE-NAME:COMMON-LISP}
- %% 11.6.0 2
- % Discussion of package LISP and USER removed. -kmp 15-Feb-92
- \endissue{LISP-PACKAGE-NAME:COMMON-LISP}
- \issue{PACKAGE-CLUTTER:REDUCE}
- %% 11.6.0 5
- % Discussion of the CLtL1 package named SYSTEM removed.
- \endissue{PACKAGE-CLUTTER:REDUCE}
- \beginsubsubsection{The COMMON-LISP Package}
- \idxpackref{common-lisp}\idxpackref{cl}
- \issue{LISP-PACKAGE-NAME:COMMON-LISP}
-
- \Thepackage{common-lisp} contains the primitives of the \clisp\ system as
- defined by this specification. Its \term{external} \term{symbols} include
- all of the \term{defined names} (except for \term{defined names} in
- \thepackage{keyword}) that are present in the \clisp\ system,
- such as \funref{car}, \funref{cdr}, \varref{*package*}, etc.
- \Thepackage{common-lisp} has the \term{nickname} \packref{cl}.
-
- \issue{PACKAGE-CLUTTER:REDUCE}
- \Thepackage{common-lisp} has as \term{external} \term{symbols} those
- symbols enumerated in the figures in \secref\CLsymbols, and no others.
- These \term{external} \term{symbols} are \term{present} in \thepackage{common-lisp}
- but their \term{home package} need not be \thepackage{common-lisp}.
- For example, the symbol \f{HELP} cannot be an \term{external symbol} of
- \thepackage{common-lisp} because it is not mentioned in \secref\CLsymbols.
- In contrast, the \term{symbol} \misc{variable}
- must be an \term{external symbol} of \thepackage{common-lisp}
- even though it has no definition
- because it is listed in that section
- (to support its use as a valid second \term{argument} to \thefunction{documentation}).
- % Moved this sentence out of previous paragraph. --sjl 7 Mar 92
- \Thepackage{common-lisp} can have additional \term{internal symbols}.
- \endissue{PACKAGE-CLUTTER:REDUCE}
- \beginsubsubsubsection{Constraints on the COMMON-LISP Package for Conforming Implementations}
- \issue{PACKAGE-CLUTTER:REDUCE}
- In a \term{conforming implementation},
- an \term{external} \term{symbol} of \thepackage{common-lisp} can have
- a \term{function}, \term{macro}, or \term{special operator} definition,
- %top level value ???
- a \term{global variable} definition
- (or other status as a \term{dynamic variable}
- due to a \declref{special} \term{proclamation}),
- or a \term{type} definition
- only if explicitly permitted in this standard.
- %% That's the definition of a conforming implementation. -kmp
- %that is, a \term{conforming program} may assume that this is true.
- For example,
- \funref{fboundp} \term{yields} \term{false}
- for any \term{external symbol} of \thepackage{common-lisp}
- that is not the \term{name} of a \term{standardized}
- \term{function}, \term{macro} or \term{special operator},
- and
- \funref{boundp} returns \term{false}
- for any \term{external symbol} of \thepackage{common-lisp}
- that is not the \term{name} of a \term{standardized} \term{global variable}.
- It also follows that
- \term{conforming programs} can use \term{external symbols} of \thepackage{common-lisp}
- as the \term{names} of local \term{lexical variables}
- with confidence that those \term{names} have not been \term{proclaimed} \declref{special}
- by the \term{implementation}
- unless those \term{symbols} are
- \term{names} of \term{standardized} \term{global variables}.
- %%KMP: Initially or for all times? -kmp 2-Jan-91
- %%Sandra: The intent was to cover properties put there by the implementation, not the user.
- %%KMP: I double-checked the issues, and that seems to be right.
- % No \term{external symbols} of \thepackage{common-lisp}
- % can have \term{properties} with \term{property indicators}
- % that are either \term{external symbols} of any \term{standardized} \term{packages}
- % or otherwise \term{accessible} in \thepackage{common-lisp-user}.
- %% Rewritten. -kmp 15-Feb-92
- A \term{conforming implementation} must not place any \term{property} on
- an \term{external symbol} of \thepackage{common-lisp} using a \term{property indicator}
- that is either an \term{external symbol} of any \term{standardized} \term{package}
- or a \term{symbol} that is otherwise \term{accessible} in \thepackage{common-lisp-user}.
-
- %Valid programs
- % can assume that the conformal Lisp implementation will not
- % have prohibited properties. The proposal LISP-SYMBOL-REDEFINITION
- % addresses the converse; that is, what user programs are allowed
- % to do.
- \endissue{PACKAGE-CLUTTER:REDUCE}
- \endsubsubsubsection%{Constraints on the COMMON-LISP Package for Conforming Implementations}
-
- \beginsubsubsubsection{Constraints on the COMMON-LISP Package for Conforming Programs}
- \idxtext{redefinition}
- \issue{LISP-SYMBOL-REDEFINITION:MAR89-X3J13}
- Except where explicitly allowed, the consequences are undefined if any
- of the following actions are performed on an \term{external symbol}
- of \thepackage{common-lisp}:
- \beginlist
- \itemitem{1.} \term{Binding} or altering its value (lexically or dynamically).
- (Some exceptions are noted below.)
- \itemitem{2.} Defining,
- \issue{LISP-SYMBOL-REDEFINITION-AGAIN:MORE-FIXES}
- undefining,
- \endissue{LISP-SYMBOL-REDEFINITION-AGAIN:MORE-FIXES}
- or \term{binding} it as a \term{function}.
- (Some exceptions are noted below.)
- \itemitem{3.} Defining,
- \issue{LISP-SYMBOL-REDEFINITION-AGAIN:MORE-FIXES}
- undefining,
- \endissue{LISP-SYMBOL-REDEFINITION-AGAIN:MORE-FIXES}
- or \term{binding} it as a \term{macro}
- \issue{DEFINE-COMPILER-MACRO:X3J13-NOV89}
- or \term{compiler macro}.
- \endissue{DEFINE-COMPILER-MACRO:X3J13-NOV89}
- (Some exceptions are noted below.)
- % added define-condition --sjl 7 Mar 92
- \itemitem{4.} Defining it as a \term{type specifier}
- (via \macref{defstruct},
- \macref{defclass},
- \macref{deftype},
- \macref{define-condition}).
- \itemitem{5.} Defining it as a structure (via \macref{defstruct}).
- \itemitem{6.} Defining it as a \term{declaration}
- with a \declref{declaration} \term{proclamation}.
- \itemitem{7.} Defining it as a \term{symbol macro}.
- %%Barmar notes that this can't be done to any symbols.
- %% Sandra complained, too.
- % \itemitem{n.} Altering its name.
- \itemitem{8.} Altering its \term{home package}.
- \itemitem{9.} Tracing it (via \macref{trace}).
- %What's this "or lexical" biz? -kmp 13-May-91
- \itemitem{10.} Declaring or proclaiming it
- %% we voted down the lexical declaration proposal. --sjl 7 Mar 92
- % \declref{special} or lexical
- \declref{special}
- (via \misc{declare},
- \issue{PROCLAIM-ETC-IN-COMPILE-FILE:NEW-MACRO}
- \specref{declaim},
- \endissue{PROCLAIM-ETC-IN-COMPILE-FILE:NEW-MACRO}
- or \funref{proclaim}).
- \itemitem{11.} Declaring or proclaiming its \declref{type} or \declref{ftype}
- (via \misc{declare},
- \issue{PROCLAIM-ETC-IN-COMPILE-FILE:NEW-MACRO}
- \macref{declaim},
- \endissue{PROCLAIM-ETC-IN-COMPILE-FILE:NEW-MACRO}
- or \funref{proclaim}).
- (Some exceptions are noted below.)
- \itemitem{12.} Removing it from \thepackage{common-lisp}.
- \issue{LISP-SYMBOL-REDEFINITION-AGAIN:MORE-FIXES}
- \itemitem{13.} Defining a \term{setf expander} for it
- (via \funref{defsetf} or \funref{define-setf-method}).
- \itemitem{14.} Defining, undefining, or binding its \term{setf function name}.
- \itemitem{15.} Defining it as a \term{method combination} type
- (via \funref{define-method-combination}).
- \itemitem{16.} Using it as the class-name argument
- to \funref{setf} of \funref{find-class}.
- \itemitem{17.} Binding it as a \term{catch tag}.
- \itemitem{18.} Binding it as a \term{restart} \term{name}.
- \itemitem{19.} Defining a \term{method}
- for a \term{standardized} \term{generic function}
- which is \term{applicable} when all of the \term{arguments}
- are \term{direct instances} of \term{standardized} \term{classes}.
- \endissue{LISP-SYMBOL-REDEFINITION-AGAIN:MORE-FIXES}
- \endlist
- \beginsubsubsubsubsection{Some Exceptions to Constraints on the COMMON-LISP Package for Conforming Programs}
- If an \term{external symbol} of \thepackage{common-lisp}
- is not globally defined as a \term{standardized} \term{dynamic variable}
- or \term{constant variable},
- it is allowed to lexically \term{bind} it
- and to declare the \declref{type} of that \term{binding},
- and
- it is allowed to locally \term{establish} it as a \term{symbol macro}
- (\eg with \specref{symbol-macrolet}).
- %KMP: Maybe clarify that binding CL special variables is ok,
- % but that their type decls are lexical. Is that right?
- %%I implemented the first half of that suggestion. -kmp 15-Feb-92
- Unless explicitly specified otherwise,
- if an \term{external symbol} of \thepackage{common-lisp}
- is globally defined as a \term{standardized} \term{dynamic variable},
- it is permitted to \term{bind} or \term{assign} that \term{dynamic variable}
- provided that the ``Value Type'' constraints on the \term{dynamic variable}
- are maintained, and that the new \term{value} of the \term{variable}
- is consistent with the stated purpose of the \term{variable}.
- If an \term{external symbol} of \thepackage{common-lisp} is not defined
- as a \term{standardized} \term{function}, \term{macro}, or \term{special operator},
- it is allowed to lexically \term{bind} it as a \term{function} (\eg with \specref{flet}),
- to declare the \declref{ftype} of that \term{binding},
- and
- %KMP: Barmar wanted some explication here. I think it was sandra who had
- % asked for this tracing feature just in case the implementation supported it.
- (in \term{implementations} which provide the ability to do so)
- to \macref{trace} that \term{binding}.
- If an \term{external symbol} of \thepackage{common-lisp} is not defined
- as a \term{standardized} \term{function}, \term{macro}, or \term{special operator},
- it is allowed to lexically \term{bind} it as a \term{macro} (\eg with \specref{macrolet}).
- \endissue{LISP-SYMBOL-REDEFINITION:MAR89-X3J13}
- \endissue{LISP-PACKAGE-NAME:COMMON-LISP}
- \issue{LISP-SYMBOL-REDEFINITION-AGAIN:MORE-FIXES}
- If an \term{external symbol} of \thepackage{common-lisp} is not defined
- as a \term{standardized} \term{function}, \term{macro}, or \term{special operator},
- it is allowed to lexically \term{bind} its \term{setf function name}
- as a \term{function},
- and to declare the \declref{ftype} of that \term{binding}.
- \endissue{LISP-SYMBOL-REDEFINITION-AGAIN:MORE-FIXES}
- \endsubsubsubsubsection%{Some Exceptions to Constraints on the COMMON-LISP Package for Conforming Programs}
- \endsubsubsubsection%{Constraints on the COMMON-LISP Package for Conforming Programs}
- \endsubsubsection%{The COMMON-LISP Package}
- \beginsubsubsection{The COMMON-LISP-USER Package}
- \idxpackref{common-lisp-user}\idxpackref{cl-user}
- \Thepackage{common-lisp-user} is the \term{current package} when
- a \clisp\ system starts up. This \term{package} \term{uses} \thepackage{common-lisp}.
- \Thepackage{common-lisp-user} has the \term{nickname} \packref{cl-user}.
- \issue{PACKAGE-CLUTTER:REDUCE}
- \Thepackage{common-lisp-user} can have additional \term{symbols} \term{interned} within it;
- it can \term{use} other \term{implementation-defined} \term{packages}.
- \endissue{PACKAGE-CLUTTER:REDUCE}
-
- \endsubsubsection%{The COMMON-LISP-USER Package}
- \beginsubsubsection{The KEYWORD Package}
- \idxpackref{keyword}
- %% 5.1.2 6
- %% 11.3.0 5
- % % KMP: This isn't a very apt description!
- % % %% 11.6.0 4
- % \Thepackage{keyword} contains all of the \newterm{keywords}\meaning{1}
- % used by built-in or user-defined \term{functions}.
- %% Replaced:
- \Thepackage{keyword} contains \term{symbols}, called \term{keywords}\meaning{1},
- that are typically used as special markers in \term{programs}
- and their associated data \term{expressions}\meaning{1}.
- \term{Symbol} \term{tokens} that start with a \term{package marker}
- are parsed by the \term{Lisp reader} as \term{symbols}
- in \thepackage{keyword}; \seesection\SymbolTokens.
- This makes it notationally convenient to use \term{keywords}
- when communicating between programs in different \term{packages}.
- For example, the mechanism for passing \term{keyword parameters} in a \term{call} uses
- \term{keywords}\meaning{1} to name the corresponding \term{arguments};
- \seesection\OrdinaryLambdaLists.
- \term{Symbols} in \thepackage{keyword} are, by definition, \oftype{keyword}.
- \beginsubsubsubsection{Interning a Symbol in the KEYWORD Package}
- \Thepackage{keyword} is treated differently than other \term{packages}
- in that special actions are taken when a \term{symbol} is \term{interned} in it.
- In particular, when a \term{symbol} is \term{interned} in \thepackage{keyword},
- it is automatically made to be an \term{external symbol}
- and is automatically made to be a \term{constant variable} with itself as a \term{value}.
- %% Not really needed. This is documented adequately under SYMBOL-VALUE.
- % \Thefunction{symbol-value} can be used to
- % \term{access} the \term{value} of a \term{keyword}\meaning{1}.)
- \endsubsubsubsection%{Interning a Symbol in the KEYWORD Package}
- \beginsubsubsubsection{Notes about The KEYWORD Package}
- % name conflicts are not an issue because these \term{symbols}
- % are used only as labels, not to carry application-specific information.
- %% This isn't really true and is arguably confusing.
- %% I think the following is what it was getting at. -kmp 15-Feb-92
- It is generally best to confine the use of \term{keywords} to situations in which
- there are a finitely enumerable set of names to be selected between. For example,
- if there were two states of a light switch, they might be called \kwd{on} and \kwd{off}.
- In situations where the set of names is not finitely enumerable
- (\ie where name conflicts might arise)
- it is frequently best to use \term{symbols} in some \term{package}
- other than \packref{keyword} so that conflicts will be naturally avoided.
- For example, it is generally not wise for a \term{program} to use a \term{keyword}\meaning{1}
- as a \term{property indicator}, since if there were ever another \term{program}
- that did the same thing, each would clobber the other's data.
- \endsubsubsubsection%{Notes about The KEYWORD Package}
- \endsubsubsection%{The KEYWORD Package}
- \beginsubsubsection{Implementation-Defined Packages}
- \issue{PACKAGE-CLUTTER:REDUCE}
- Other, \term{implementation-defined} \term{packages} might be present
- in the initial \clisp\ environment.
- %If it is appropriate, the standard might contain
- % as an example that implementations might have a package named
- % "SYSTEM".
- \endissue{PACKAGE-CLUTTER:REDUCE}
- It is recommended, but not required, that the documentation for a
- \term{conforming implementation} contain a full list of all \term{package} names
- initially present in that \term{implementation} but not specified in this specification.
- (See also the \term{function} \funref{list-all-packages}.)
- \endsubsubsection%{Implementation-Defined Packages}
- \endsubSection%{Standardized Packages}
|