(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))
(cdr z)))
(z x (null z))
((;; この内部ループは本当に燃やす必要があります。
;; (高負荷という意味)
declare (optimize speed))
(declare (fixnum i))
( ))
declare
, declaim
, proclaim
, 3.3.4. 宣言のスコープ
optimize
宣言は、決して変数束縛にも関数束縛にも適用しません。 optimize
宣言は自由宣言にのみ使用できます。 詳細は3.3.4. 宣言のスコープをご確認ください。