(optimize {quality | (quality value)}*
)
quality | an optimize quality. |
value | one of the integers 0 , 1 , 2 , or 3 .
|
Advises the compiler that each quality should be given attention according to the specified corresponding value. Each quality must be a symbol naming an optimize quality; the names and meanings of the standard optimize qualities are shown in Figure 3–25.
Name | Meaning |
---|---|
compilation-speed | speed of the compilation process |
debug | ease of debugging |
safety | run-time error checking |
space | both code size and run-time space |
speed | speed of the object code |
There may be other, implementation-defined optimize qualities.
A value 0
means that the corresponding quality is totally
unimportant, and 3
that the quality is extremely important;
1
and 2
are intermediate values, with 1
the
neutral value.
(quality 3)
can be abbreviated to quality.
Note that code which has the optimization (safety 3)
,
or just safety,
is called safe code.
The consequences are unspecified if a quality appears more than once with different values.
(defun often-used-subroutine (x y)
(declare (optimize (safety 2)))
(error-check x y)
(hairy-setup x)
(do ((i 0 (+ i 1))
(z x (cdr z)))
((null z))
;; This inner loop really needs to burn.
(declare (optimize speed))
(declare (fixnum i))
))
An optimize declaration never applies to either a variable or a function binding. An optimize declaration can only be a free declaration. For more information, see Declaration Scope.