123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400 |
- % -*- Mode: TeX -*-
- % At Barmar's suggestion, and by consensus of Quinquevirate, the type hierarchy
- % diagrams, which were quite hard to maintain and anyway unnecessary, were removed.
- % The removed text is in
- % Stony-Brook.SCRC.Symbolics.COM:>ANSI-CL>spec>archive>source>type-hierarchy-diagrams.tex
- % -kmp 10-Jun-91
- \beginsubSection{Data Type Definition}
- %% No longer true.
- %Following is a description of each \clisp\ \term{type}.
- % %This kind of info belongs in the descriptions of the ftype{...} labels.
- % %New. -kmp
- % % Barmar: Relate to the use of "Type" vs "System Class" in following descriptions.
- % % Barrett: Perhaps safer to say "Where explicitly noted..."
- % % KMP: In fact, I think the paragraph should just disappear, since in all cases where
- % % something is both a type and a class, there is a Class Precedence List section
- % % in its definition, and the ordering info is already well-defined.
- % % Barmar: If there's always a CPL given, then I agree.
- %% Removed. -kmp 15-Feb-92
- % Except as otherwise noted,
- % every \term{symbol} naming a \term{type}
- % defined in this specification is also the name of a \term{class} that implements
- % the \term{type}. In cases where there is a corresponding \term{class},
- % the order of its \term{class precedence list} is consistent with the order
- % of the subtype relationships given for the \term{type}.
- Information about \term{type} usage is located in
- the sections specified in \figref\TypeInfoXrefs.
- \figref\ObjectSystemClasses\ lists some \term{classes}
- that are particularly relevant to the \CLOS.
- \figref\StandardizedConditionTypes\ lists the defined \term{condition} \term{types}.
- \DefineFigure{TypeInfoXrefs}
- \showtwo{Cross-References to Data Type Information}{
- \hfil\b{Section} & Data Type \cr
- \noalign{\vskip 2pt\hrule\vskip 2pt}
- \secref\Classes & Object System types \cr
- \secref\Slots & Object System types \cr
- \secref\Objects & Object System types \cr
- \secref\GFsAndMethods & Object System types \cr
- \secref\ConditionSystemConcepts & Condition System types \cr
- \chapref\TypesAndClasses & Miscellaneous types \cr
- \chapref\Syntax & All types---read and print syntax \cr
- %Nothing really useful here. -kmp 17-Oct-91
- %\secref\ReaderConcepts & All types---read syntax \cr
- \secref\TheLispPrinter & All types---print syntax \cr
- \secref\Compilation & All types---compilation issues \cr
- }
- %!!! Insert table of Type Specifiers like AND, OR, NOT...
- % from top of DICT-TYPES ? -kmp 17-Oct-91
- \endsubSection%{Data Type Definition}
- \beginsubSection{Type Relationships}
- \DefineSection{TypeRelationships}
- \beginlist
- \issue{DATA-TYPES-HIERARCHY-UNDERSPECIFIED}
- \itemitem{\bull}
- \Thetypes{cons}, \typeref{symbol}, \typeref{array}, \typeref{number},
- \typeref{character}, \typeref{hash-table},
- \issue{FUNCTION-TYPE:X3J13-MARCH-88}
- \typeref{function},
- \endissue{FUNCTION-TYPE:X3J13-MARCH-88}
- \typeref{readtable}, \typeref{package}, \typeref{pathname}, \typeref{stream},
- \typeref{random-state}, \typeref{condition}, \typeref{restart},
- and any single other \term{type} created by \macref{defstruct},
- %Added per suggestion of Barrett:
- \issue{TYPE-OF-AND-PREDEFINED-CLASSES:UNIFY-AND-EXTEND}
- \issue{CLOS-CONDITIONS:INTEGRATE}
- \macref{define-condition},
- \endissue{CLOS-CONDITIONS:INTEGRATE}
- \endissue{TYPE-OF-AND-PREDEFINED-CLASSES:UNIFY-AND-EXTEND}
- or \macref{defclass} are \term{pairwise} \term{disjoint},
- except for type relations explicitly established by specifying
- \term{superclasses} in \macref{defclass}
- \issue{TYPE-OF-AND-PREDEFINED-CLASSES:UNIFY-AND-EXTEND}
- \issue{CLOS-CONDITIONS:INTEGRATE}
- or \macref{define-condition}
- \endissue{CLOS-CONDITIONS:INTEGRATE}
- \endissue{TYPE-OF-AND-PREDEFINED-CLASSES:UNIFY-AND-EXTEND}
- or the \kwd{include} option of \macref{destruct}.
- %The following will be left out of the standard.
- %% 2.15.0 6
- %\itemitem{\bull} \typeref{Cons}, \typeref{symbol},
- %\typeref{array}, \typeref{number}, and \typeref{character}
- %are \term{pairwise} \term{disjoint}.
- \endissue{DATA-TYPES-HIERARCHY-UNDERSPECIFIED}
- \issue{DATA-TYPES-HIERARCHY-UNDERSPECIFIED}
- %The following will be left out of the standard.
- %% 2.15.0 27
- %\itemitem{\bull} \typeref{hash-table}, \typeref{readtable},
- %\typeref{package}, \typeref{pathname},
- %\typeref{stream}, and \typeref{random-state} are
- %\term{pairwise} \term{disjoint}.
- \endissue{DATA-TYPES-HIERARCHY-UNDERSPECIFIED}
- %% 2.15.0 28
- \itemitem{\bull} Any two \term{types} created by \macref{defstruct} are
- \term{disjoint} unless
- one is a \term{supertype} of the other by virtue of
- the \macref{defstruct} \kwd{include} option.
- \editornote{KMP: The comments in the source say gray suggested some change
- from ``common superclass'' to ``common subclass'' in the following, but the
- result looks suspicious to me.}
- %!!! Barrett says: It fits the glossary definition of disjoint, i.e., no common
- % elements. However, I think that is broken.
- %
- % In places where we have specified disjointness requirements, all we really seem to
- % be intendeing is that two types C1 and C2 are disjoint if neither is a subtype of
- % the other.
- \itemitem{\bull}
- Any two \term{distinct} \term{classes} created by \macref{defclass}
- % added --sjl 7 Mar 92
- or \macref{define-condition}
- are \term{disjoint} unless they have a common \term{subclass} or
- one \term{class} is a \term{subclass} of the other.
- %% The preceding text by Moon replaces the following...
- % %% "common superclass" changed to "common subclass" as suggested by Gray
- % \itemitem{\bull} Any two \term{classes} created by \macref{defclass}
- % are \term{disjoint} unless they have a common \term{subclass} or
- % one \term{class} is a \term{superclass} of the other.
- % %Any two \term{classes}
- % %created by \macref{defclass} are \term{disjoint}
- % %unless they have a common \term{superclass}." {That assumes that
- % %our definition of superclass says every class is a superclass of
- % %itself, which I think is the case, but did not check.}
- % %
- % %RPG suggestion follows:
- % %\itemitem{\bull} Any type created by defstruct or defclass is guaranteed
- % %to be disjoint from all other types unless subclass or :include is used.
- \issue{COMMON-TYPE:REMOVE}
- %The following will be deleted from the standard:
- %
- %% 2.15.0 29
- %\itemitem{\bull} An \term{exhaustive union} for
- %\thetype{common} is formed by \typeref{cons}, \typeref{symbol},
- %\f{(array x)} where \f{x} is either \typeref{t} or a \term{subtype} of \typeref{common},
- %\typeref{string}, \typeref{fixnum}, \typeref{bignum}, \typeref{ratio},
- %\typeref{short-float}, \typeref{single-float}, \typeref{double-float}, \typeref{long-float},
- %\f{(complex x)} where \f{x} is a \term{subtype} of \typeref{common},
- %\typeref{standard-char}, \typeref{hash-table}, \typeref{readtable},
- %\typeref{package}, \typeref{pathname},
- %\typeref{stream}, \typeref{random-state},
- %and all \term{types} created by the user via \macref{defstruct}.
- %An implementation cannot add \term{subtypes} to \typeref{common}.
- \endissue{COMMON-TYPE:REMOVE}
- %% Following is suggested by Moon, rewording of a clause in 88-002R.
- \itemitem{\bull}
- An implementation may be extended to add other \term{subtype}
- relationships between the specified \term{types}, as long as they do
- not violate the type relationships and disjointness requirements
- specified here. An implementation may define additional \term{types}
- that are \term{subtypes} or \term{supertypes} of any
- specified \term{types}, as long as each additional \term{type} is
- a \subtypeof{t} and a \supertypeof{nil} and the disjointness requirements
- are not violated.
-
- \issue{TYPE-OF-AND-PREDEFINED-CLASSES:UNIFY-AND-EXTEND}
- At the discretion of the implementation, either \typeref{standard-object}
- or \typeref{structure-object} might appear in any class precedence list
- for a \term{system class} that does not already specify either
- \typeref{standard-object} or \typeref{structure-object}. If it does,
- it must precede \theclass{t} and follow all other \term{standardized} \term{classes}.
- \endissue{TYPE-OF-AND-PREDEFINED-CLASSES:UNIFY-AND-EXTEND}
- \endlist
- \endsubSection%{Type relationships}
- %% Type Specifiers
- \beginsubSection{Type Specifiers}
- \DefineSection{TypeSpecifiers}
- \issue{ARRAY-TYPE-ELEMENT-TYPE-SEMANTICS:UNIFY-UPGRADING}
- %Discussion of difference between "type specifiers for declaration"
- %and "type specifiers for discrimination" removed.
- \endissue{ARRAY-TYPE-ELEMENT-TYPE-SEMANTICS:UNIFY-UPGRADING}
- %% 4.1.0 1
- \term{Type specifiers} can be \term{symbols}, \term{classes}, or \term{lists}.
- \figref\StandardizedAtomicTypeSpecs\ lists \term{symbols} that are
- \term{standardized} \term{atomic type specifiers}, and
- \figref\StandardizedCompoundTypeSpecNames\ lists
- \term{standardized} \term{compound type specifier} \term{names}.
- For syntax information, see the dictionary entry for the corresponding \term{type specifier}.
- It is possible to define new \term{type specifiers} using
- \macref{defclass},
- \macref{define-condition},
- \macref{defstruct},
- or
- \macref{deftype}.
- \issue{CHARACTER-VS-CHAR:LESS-INCONSISTENT-SHORT}
- \issue{STREAM-ACCESS:ADD-TYPES-ACCESSORS}
- \DefineFigure{StandardizedAtomicTypeSpecs}
- %% 4.3.0 4
- \displaythree{Standardized Atomic Type Specifiers}{
- arithmetic-error&function&simple-condition\cr
- array&generic-function&simple-error\cr
- atom&hash-table&simple-string\cr
- base-char&integer&simple-type-error\cr
- base-string&keyword&simple-vector\cr
- bignum&list&simple-warning\cr
- bit&logical-pathname&single-float\cr
- bit-vector&long-float&standard-char\cr
- broadcast-stream&method&standard-class\cr
- built-in-class&method-combination&standard-generic-function\cr
- cell-error&nil&standard-method\cr
- character&null&standard-object\cr
- class&number&storage-condition\cr
- compiled-function&package&stream\cr
- complex&package-error&stream-error\cr
- concatenated-stream&parse-error&string\cr
- condition&pathname&string-stream\cr
- cons&print-not-readable&structure-class\cr
- control-error&program-error&structure-object\cr
- division-by-zero&random-state&style-warning\cr
- double-float&ratio&symbol\cr
- echo-stream&rational&synonym-stream\cr
- end-of-file&reader-error&t\cr
- error&readtable&two-way-stream\cr
- extended-char&real&type-error\cr
- file-error&restart&unbound-slot\cr
- file-stream&sequence&unbound-variable\cr
- fixnum&serious-condition&undefined-function\cr
- float&short-float&unsigned-byte\cr
- floating-point-inexact&signed-byte&vector\cr
- floating-point-invalid-operation&simple-array&warning\cr
- floating-point-overflow&simple-base-string&\cr
- floating-point-underflow&simple-bit-vector&\cr
- }
- \endissue{STREAM-ACCESS:ADD-TYPES-ACCESSORS}
- \endissue{CHARACTER-VS-CHAR:LESS-INCONSISTENT-SHORT}
- \indent
- %% 4.2.0 1
- If a \term{type specifier} is a \term{list}, the \term{car} of the \term{list}
- is a \term{symbol}, and the rest of the \term{list} is subsidiary
- \term{type} information. Such a \term{type specifier} is called
- a \newterm{compound type specifier}.
- Except as explicitly stated otherwise,
- the subsidiary items can be unspecified.
- The unspecified subsidiary items are indicated
- by writing \f{*}. For example, to completely specify
- a \term{vector}, the \term{type} of the elements
- and the length of the \term{vector} must be present.
- \code
- (vector double-float 100)
- \endcode
- The following leaves the length unspecified:
- \code
- (vector double-float *)
- \endcode
- The following leaves the element type unspecified:
- \code
- (vector * 100)
- \endcode
- Suppose that two \term{type specifiers} are the same except that the first
- has a \f{*} where the second has a more explicit specification.
- Then the second denotes a \term{subtype}
- of the \term{type} denoted by the first.
- %% 4.2.0 2
- If a \term{list} has one or more unspecified items at the end,
- those items can be dropped.
- If dropping all occurrences of \f{*} results in a \term{singleton} \term{list},
- then the parentheses can be dropped as well (the list can be replaced
- by the \term{symbol} in its \term{car}).
- For example,
- {\tt (vector double-float *)}
- can be abbreviated to {\tt (vector double-float)},
- and {\tt (vector * *)} can be abbreviated to {\tt (vector)}
- and then to
- {\tt vector}.
- \issue{REAL-NUMBER-TYPE:X3J13-MAR-89}
- %Syntax info removed to make the document smaller and more modular. -kmp 20-Oct-91
- %Added CONS per Dalton #10 (first public review). -kmp 10-May-93
- \DefineFigure{StandardizedCompoundTypeSpecNames}
- \displaythree{Standardized Compound Type Specifier Names}{
- and&long-float&simple-base-string\cr
- array&member&simple-bit-vector\cr
- base-string&mod&simple-string\cr
- bit-vector¬&simple-vector\cr
- complex&or&single-float\cr
- cons&rational&string\cr
- double-float&real&unsigned-byte\cr
- eql&satisfies&values\cr
- float&short-float&vector\cr
- function&signed-byte&\cr
- integer&simple-array&\cr
- }
- \endissue{REAL-NUMBER-TYPE:X3J13-MAR-89}
- \Thenextfigure\ show the \term{defined names} that can be used as
- \term{compound type specifier} \term{names}
- but that cannot be used as \term{atomic type specifiers}.
- \displaythree{Standardized Compound-Only Type Specifier Names}{
- and&mod&satisfies\cr
- eql¬&values\cr
- member&or&\cr
- }
- %% 4.7.0 1
- New \term{type specifiers} can come into existence in two ways.
- \beginlist
- \itemitem{\bull}
- Defining a structure by using \macref{defstruct} without using
- the \kwd{type} specifier or defining a \term{class} by using
- \macref{defclass}
- % added --sjl 7 Mar 92
- or \macref{define-condition}
- automatically causes the name of the structure
- or class to be a new \term{type specifier} \term{symbol}.
- \itemitem{\bull}
- \macref{deftype} can be used to define \newtermidx{derived type specifiers}{derived type specifier},
- which act as `abbreviations' for other \term{type specifiers}.
- \endlist
- A \term{class} \term{object} can be used as a \term{type specifier}.
- When used this way, it denotes the set of all members of that \term{class}.
- \Thenextfigure\ shows some \term{defined names} relating to
- \term{types} and \term{declarations}.
- % I added SUBTYPEP, TYPEP, DEFINE-CONDITION. --sjl 7 Mar 92
- \DefineFigure{TypesAndDeclsNames}
- \displaythree{Defined names relating to types and declarations.}{
- coerce&defstruct&subtypep\cr
- declaim&deftype&the\cr
- declare&ftype&type\cr
- defclass&locally&type-of\cr
- define-condition&proclaim&typep\cr
- }
- \Thenextfigure\ shows all \term{defined names} that are \term{type specifier} \term{names},
- whether for \term{atomic type specifiers} or \term{compound type specifiers};
- this list is the union of the lists in \figref\StandardizedAtomicTypeSpecs\
- and \figref\StandardizedCompoundTypeSpecNames.
- \DefineFigure{StandardizedTypeSpecifierNames}
- \displaythree{Standardized Type Specifier Names}{
- and&function&simple-array\cr
- arithmetic-error&generic-function&simple-base-string\cr
- array&hash-table&simple-bit-vector\cr
- atom&integer&simple-condition\cr
- base-char&keyword&simple-error\cr
- base-string&list&simple-string\cr
- bignum&logical-pathname&simple-type-error\cr
- bit&long-float&simple-vector\cr
- bit-vector&member&simple-warning\cr
- broadcast-stream&method&single-float\cr
- built-in-class&method-combination&standard-char\cr
- cell-error&mod&standard-class\cr
- character&nil&standard-generic-function\cr
- class¬&standard-method\cr
- compiled-function&null&standard-object\cr
- complex&number&storage-condition\cr
- concatenated-stream&or&stream\cr
- condition&package&stream-error\cr
- cons&package-error&string\cr
- control-error&parse-error&string-stream\cr
- division-by-zero&pathname&structure-class\cr
- double-float&print-not-readable&structure-object\cr
- echo-stream&program-error&style-warning\cr
- end-of-file&random-state&symbol\cr
- eql&ratio&synonym-stream\cr
- error&rational&t\cr
- extended-char&reader-error&two-way-stream\cr
- file-error&readtable&type-error\cr
- file-stream&real&unbound-slot\cr
- fixnum&restart&unbound-variable\cr
- float&satisfies&undefined-function\cr
- floating-point-inexact&sequence&unsigned-byte\cr
- floating-point-invalid-operation&serious-condition&values\cr
- floating-point-overflow&short-float&vector\cr
- floating-point-underflow&signed-byte&warning\cr
- }
- \endsubSection%{Type Specifiers}
|