(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. 宣言のスコープをご確認ください。