* Compiler Policy::
* Compiler Errors::
* Open Coding and Inline Expansion::
+* Interpreter::
@end menu
@node Diagnostic Messages
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
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}.