X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=doc%2Fmanual%2Fbeyond-ansi.texinfo;h=93929ececdda4e1064d09e9e598ce1ad344dde2f;hb=22a6702974b7d6ff4e8f2b3b7b5ff446fc632de0;hp=6e44f7defe177a27b2117bca11b829bdc88e3a6e;hpb=d29b504c51bc69b3ea2eff8cdeaae4f7c9614b72;p=sbcl.git diff --git a/doc/manual/beyond-ansi.texinfo b/doc/manual/beyond-ansi.texinfo index 6e44f7d..93929ec 100644 --- a/doc/manual/beyond-ansi.texinfo +++ b/doc/manual/beyond-ansi.texinfo @@ -45,29 +45,13 @@ are: @itemize @item -@tindex metaobject -the abstract @code{metaobject} class is not present in the class -hierarchy; - -@item -@tindex standard-object -@tindex funcallable-standard-object -the @code{standard-object} and @code{funcallable-standard-object} -classes are disjoint; - -@item @findex compute-effective-method @findex sb-mop:compute-effective-method -@code{compute-effective-method} only returns one value, not two; - -@item -@findex compute-slots -@findex sb-mop:compute-slots -@tindex funcallable-standard-class -the system-supplied @code{:around} method for @code{compute-slots} -specialized on @code{funcallable-standard-class} does not respect the -requested order from a user-supplied primary method. +@code{compute-effective-method} only returns one value, not two. +There is no record of what the second return value was meant to +indicate, and apparently no clients for it. + @item @findex ensure-generic-function @findex generic-function-declarations @@ -77,6 +61,101 @@ the arguments @code{:declare} and @code{:declarations} to argument defining the declarations to be stored and returned by @code{generic-function-declarations}. +Where AMOP specifies @code{:declarations} as the keyword argument to +@code{ensure-generic-function}, the Common Lisp standard specifies +@code{:declare}. Portable code should use @code{:declare}. + +@item +@findex validate-superclass +@findex finalize-inheritance +@findex sb-mop:validate-superclass +@findex sb-mop:finalize-inheritance +@tindex standard-class +@tindex funcallable-standard-class +@tindex sb-mop:funcallable-standard-class +@tindex function +@findex sb-mop:class-prototype +@findex class-prototype +although SBCL obeys the requirement in AMOP for +@code{validate-superclass} for @code{standard-class} and +@code{funcallable-standard-class} to be compatible metaclasses, we +impose an additional requirement at class finalization time: a class +of metaclass @code{funcallable-standard-class} must have +@code{function} in its superclasses, and a class of metaclass +@code{standard-class} must not. + +@findex typep +@findex class-of +@findex subtypep +At class finalization, a class prototype which is accessible by a +standard mop function @code{sb-mop:class-prototype}. The user can +then ask whether this object is a @code{function} or not in several +different ways: whether it is a function according to @code{typep}; +whether its @code{class-of} is @code{subtypep} @code{function}, or +whether @code{function} appears in the superclasses of the class. The +additional consistency requirement comes from the desire to make all +of these answers the same. + +The following class definitions are bad, and will lead to errors +either immediately or if an instance is created: +@lisp +(defclass bad-object (funcallable-standard-object) + () + (:metaclass standard-class)) +@end lisp +@lisp +(defclass bad-funcallable-object (standard-object) + () + (:metaclass funcallable-standard-class)) +@end lisp +The following definition is acceptable: +@lisp +(defclass mixin () + ((slot :initarg slot))) +(defclass funcallable-object (funcallable-standard-object mixin) + () + (:metaclass funcallable-standard-class)) +@end lisp +and leads to a class whose instances are funcallable and have one slot. + +@item +the requirement that ``No portable class @math{C_p} may inherit, by +virtue of being a direct or indirect subclass of a specified class, any +slot for which the name is a symbol accessible in the +@code{common-lisp-user} package or exported by any package defined in +the ANSI Common Lisp standard.'' is interpreted to mean that the +standardized classes themselves should not have slots named by external +symbols of public packages. + +The rationale behind the restriction is likely to be similar to the ANSI +Common Lisp restriction on defining functions, variables and types named +by symbols in the Common Lisp package: preventing two independent pieces +of software from colliding with each other. + +@item +@findex slot-value-using-class +@findex sb-mop:slot-value-using-class +@findex (setf slot-value-using-class) +@findex (setf sb-mop:slot-value-using-class) +@findex slot-boundp-using-class +@findex sb-mop:slot-boundp-using-class +specializations of the @code{new-value} argument to @code{(setf +sb-mop:slot-value-using-class)} are not allowed: all user-defined +methods must have a specializer of the class @code{t}. + +This prohibition is motivated by a separation of layers: the +@code{slot-value-using-class} family of functions is intended for use in +implementing different and new slot allocation strategies, rather than +in performing application-level dispatching. Additionally, with this +requirement, there is a one-to-one mapping between metaclass, class and +slot-definition-class tuples and effective methods of @code{(setf +slot-value-using-class)}, which permits optimization of @code{(setf +slot-value-using-class)}'s discriminating function in the same manner as +for @code{slot-value-using-class} and @code{slot-boundp-using-class}. + +Note that application code may specialize on the @code{new-value} +argument of slot accessors. + @end itemize @node Support For Unix @@ -89,6 +168,31 @@ the @code{sb-ext:posix-getenv} function. @include fun-sb-ext-posix-getenv.texinfo +External programs can be run with @code{sb-ext:run-program}. + +@include fun-sb-ext-run-program.texinfo + +@include fun-sb-ext-process-p.texinfo + +@include fun-sb-ext-process-input.texinfo + +@include fun-sb-ext-process-output.texinfo + +@include fun-sb-ext-process-error.texinfo + +@include fun-sb-ext-process-alive-p.texinfo + +@include fun-sb-ext-process-status.texinfo + +@include fun-sb-ext-process-wait.texinfo + +@include fun-sb-ext-process-exit-code.texinfo + +@include fun-sb-ext-process-core-dumped.texinfo + +@include fun-sb-ext-process-close.texinfo + +@include fun-sb-ext-process-kill.texinfo @node Customization Hooks for Users @comment node-name, next, previous, up