X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=doc%2Fbeyond-ansi.sgml;h=694898ad38e8801db088a54e65615e9c5052087f;hb=22c1de0a40df83bb5628974010a879cb2c17ff53;hp=1990336c1458ab553d3ab20f09d9cf6cbadf101d;hpb=be76f6319dcb41477209676e6f26e0030e4659ba;p=sbcl.git diff --git a/doc/beyond-ansi.sgml b/doc/beyond-ansi.sgml index 1990336..694898a 100644 --- a/doc/beyond-ansi.sgml +++ b/doc/beyond-ansi.sgml @@ -48,7 +48,7 @@ of the same symbol more than once is undefined unless the new value is eql to the old value. Conforming to this specification is a nuisance when the "constant" value is only constant under some weaker test like string= or equal. It's -especially annoying because defconstant takes effect +especially annoying because, in &SBCL;, defconstant takes effect not only at load time but also at compile time, so that just compiling and loading reasonable code like (defconstant +foobyte+ '(1 4)) @@ -63,7 +63,11 @@ E.g., the code above can be given an exactly defined meaning by replacing defconstant either with defparameter or with a customized macro which does the right thing, possibly along the lines of the defconstant-eqx macro used internally in the -implementation of SBCL itself. +implementation of &SBCL; itself. In circumstances where this is not +appropriate, the programmer can handle the condition type +sb-ext:defconstant-uneql, and choose either the +continue or abort restart as +appropriate. &SBCL; gives style warnings about various kinds of perfectly legal code, e.g. @@ -118,12 +122,21 @@ whose instances can be used as Lisp streams (e.g. passed as the first argument to format). &SBCL; supports a MetaObject Protocol which is intended to be -compatible with &AMOP;; exceptions to this (as distinct from current -bugs) are that -compute-effective-method only returns one value, not -two. +compatible with &AMOP;; present exceptions to this (as distinct from +current bugs) are: + + the abstract metaobject class is not + present in the class hierarchy; + the standard-object and + funcallable-standard-object classes are + disjoint; + compute-effective-method only returns + one value, not two; + the system-supplied :around method for + compute-slots specialized on + funcallable-standard-class does not respect the + requested order from a user-supplied primary method. + @@ -323,11 +336,9 @@ fixed addresses, a precondition for using copy-on-write to share code between multiple Lisp processes. is less important with modern generational garbage collectors. -The sb-ext:truly-the operator does what the -cl:the operator does in a more conventional -implementation of &CommonLisp;, declaring the type of its argument -without any runtime checks. (Ordinarily in &SBCL;, any type -declaration is treated as an assertion and checked at runtime.) +The sb-ext:truly-the declares the type of the +result of the operations, producing its argument; the declaration is +not checked. In short: don't use it. The sb-ext:freeze-type declaration declares that a type will never change, which can make type testing @@ -340,9 +351,11 @@ to it. This is appropriate for functions like sqrt, but is not appropriate for functions like aref, which can change their return values when the underlying data are changed. + - \ No newline at end of file +