X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=doc%2Fmanual%2Fcompiler.texinfo;h=d2d9746082bf1fdf53cc7318b93a5845683d4ed6;hb=031646c3b8236eb441434664e10fb88f8e7ec7be;hp=a4e287b34c308dfbac5500f87d21eb58ae9c5df8;hpb=d3f80ab16fd7058fedefaf2a84e3f072559eaa3d;p=sbcl.git diff --git a/doc/manual/compiler.texinfo b/doc/manual/compiler.texinfo index a4e287b..d2d9746 100644 --- a/doc/manual/compiler.texinfo +++ b/doc/manual/compiler.texinfo @@ -11,11 +11,12 @@ naive translation. Efficiency issues are sufficiently varied and separate that they have their own chapter, @ref{Efficiency}. @menu -* Diagnostic Messages:: +* Diagnostic Messages:: * Handling of Types:: * Compiler Policy:: * Compiler Errors:: * Open Coding and Inline Expansion:: +* Interpreter:: @end menu @node Diagnostic Messages @@ -77,6 +78,12 @@ Cancels the effect of a previous @code{sb-ext:muffle-condition} declaration. @end deffn +Various details of @emph{how} the compiler messages are printed can be +controlled via the alist +@code{sb-ext:*compiler-print-variable-alist*}. + +@include var-sb-ext-star-compiler-print-variable-alist-star.texinfo + @c - @node Diagnostic Severity @comment node-name, next, previous, up @subsection Diagnostic Severity @cindex Severity of compiler messages -@cindex compiler diagnostic severity +@cindex Compiler Diagnostic Severity @tindex error @tindex warning @tindex style-warning @@ -393,7 +390,7 @@ This message is not saying ``there is a problem somewhere in this @node The Processing Path @comment node-name, next, previous, up @subsubsection The Processing Path -@cindex Processing path +@cindex Processing Path @cindex Macroexpansion @cindex Source-to-source transformation @@ -518,14 +515,16 @@ selectable via @code{optimize} declarations. All declarations are considered assertions to be checked at runtime, and all type checks are precise. -Used when @code{(>= safety (max speed space compilation-speed)}. The +Used when @code{(and (< 0 safety) (or (>= safety 2) (>= safety speed)))}. The default compilation policy provides full type checks. @item Weak Type Checks Any or all type declarations may be believed without runtime -assertions, and assertions that are done may be imprecise. +assertions, and assertions that are done may be imprecise. It should +be noted that it is relatively easy to corrupt the heap when weak type +checks are used, and type-errors are introduced into the program. -Used when @code{(< 0 safety (max speed space compilation-speed)}. +Used when @code{(and (< safety 2) (< safety speed))} @item No Type Checks All declarations are believed without assertions. Also disables @@ -769,7 +768,7 @@ Policy Control}. Ordinarily, when the @code{speed} quality is high, the compiler emits notes to notify the programmer about its inability to apply various optimizations. For selective muffling of these notes @xref{Controlling -Verbosity} +Verbosity}. The value of @code{space} mostly influences the compiler's decision whether to inline operations, which tend to increase the size of @@ -862,6 +861,7 @@ is to slow the program by causing cache misses or even swapping. @c _ In addition to suppressing type checks, \code{0} also suppresses @c _ argument count checking, unbound-symbol checking and array bounds @c _ checks. +@c _ ... and checking of tag existence in RETURN-FROM and GO. @c _ @c _\item[\code{extensions:inhibit-warnings}] \cindex{inhibit-warnings @c _ optimization quality}This is a CMU extension that determines how @@ -1019,8 +1019,8 @@ character position and gives up on the entire source file. @comment node-name, next, previous, up @section Open Coding and Inline Expansion @cindex Open-coding -@cindex inline expansion -@cindex static functions +@cindex Inline expansion +@cindex Static functions Since Common Lisp forbids the redefinition of standard functions, the compiler can have special knowledge of these standard functions @@ -1091,3 +1091,20 @@ open-coded. Even when not open-coded, a call to a standard function may be transformed into a different function call (as in the last example) or compiled as @emph{static call}. Static function call uses a more efficient calling convention that forbids redefinition. + +@node Interpreter +@comment node-name, next, previous, up +@section Interpreter +@cindex Interpreter +@vindex sb-ext:*evaluator-mode* + +By default SBCL implements @code{eval} by calling the native code +compiler. SBCL also includes an interpreter for use in special cases +where using the compiler is undesirable, for example due to compilation +overhead. Unlike in some other Lisp implementations, in SBCL interpreted +code is not safer or more debuggable than compiled code. + +Switching between the compiler and the interpreter is done using the +special variable @code{sb-ext:*evaluator-mode*}. As of 0.9.17, valid +values for @code{sb-ext:*evaluator-mode*} are @code{:compile} and +@code{:interpret}.