% Declaration OPTIMIZE
(optimize
{
quality |
(quality value)}
*)
quality - 最適化の性質
value - 次の整数のうちのひとつ、0
, 1
, 2
, 3
declare
かproclaim
なし。
コンパイラーに対して、各qualityが対応する値valueで指定されたことの 注意を促すように知らせます。 各qualityは最適化の性質の名前のシンボルである必要があります。 その名前である標準の最適化の性質を次の表に表します。
名前 | 意味 |
---|---|
compilation-speed |
コンパイル処理の速度 |
debug |
デバッグのやりやすさ |
safety |
実行自エラーチェック |
space |
コードサイズと実行時空間の両方 |
speed |
コードの速度 |
Figure 3-25. 最適化の性質
他にも実装定義の最適化の性質が存在します。
値0
は対応するqualityが全体的に重要ではないことを意味します。
値3
はqualityが非常に重要であることを意味します。
値1
と2
はその中間の値であり、値1
が標準の値です。
(quality 3)
は省略してquality
と記載できます。
最適化(safety 3)
かただsafety
と指定したコードは、
安全なコードと呼ばれます。
qualityが複数違う値で現れたときの結果は指定されていません。
(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))
;; この内部ループは本当に燃やす必要があります。
;; (高負荷という意味)
(declare (optimize speed))
(declare (fixnum i))
))
declare
,
declaim
,
proclaim
,
3.3.4. 宣言のスコープ
optimize
宣言は、決して変数束縛にも関数束縛にも適用しません。
optimize
宣言は自由宣言にのみ使用できます。
詳細は3.3.4. 宣言のスコープをご確認ください。