1

このコマンドが実行する最適化手順の一部は何ですか?

`(optimize speed (safety 0))`

Lisp/Scheme プログラムでこれらの手法の一部をハンドコーディングできますか?

4

3 に答える 3

3
  1. これらが CL で何をするかは、実装によって異なります。通常、さまざまなトレードオフでコードに適用できる最適化やその他のコード変換が多数あり、これらの宣言は、これらの個々の変換に変換される上位レベルの仕様として使用されます。ほとんどの実装では、個々の設定を制御することもできますが、移植性はありません。
  2. 一部のスキームは同様のアプローチを使用していますが、Scheme にはそのような標準機能はありません。問題は、Scheme が一般的に (つまり、標準で) そのような「現実世界」の問題を回避することです。あちこちでいくつかの最適化手法を使用することは可能ですが、それは実装に依存します。たとえば、PLT で最初にすべきことは、コードがモジュールで定義されていることを確認することです。これにより、コンパイラーは、ループのインライン化や展開などの一連の最適化を確実に実行できるようになります。
于 2009-07-08T03:32:41.313 に答える
1

わかりませんが、探索したい場合は、 SBCL internals wikiにいくつかの出発点があると思います。

于 2009-07-08T15:50:34.737 に答える
1

高速に設定すると、コンパイラは、定数の折りたたみ、コンパイル時の型推論 (したがって、ジェネリック操作の実行時の動的ディスパッチを排除する)、およびその他のコード分析/変換でより多くの作業を行うようになります。安全性が低いと、実行時の型チェック、配列バインド チェックなどがスキップされます。詳細については、 CMUCL ユーザーズ マニュアルの 高度なコンパイラの使用と効率のヒントの章を参照してください。これは、 CMUCLSBCLの両方に(多かれ少なかれ)適用されます。

于 2009-07-08T10:55:38.113 に答える