レキシカル アドレス指定は、変数の検索を高速化するのに役立ちます。レキシカル アドレス指定がなければ、変数を検索するには、実行時に現在の環境のフレーム、またはそれを囲む環境のフレームなどをすべてトラバースする必要があります。これは本の中で言及されています:
これまでに実装したコンパイラは、評価マシンの変数値の検索操作を使用するコードを生成します。これは、変数を現在バインドされている各変数と比較することで変数を検索し、フレームごとにランタイム環境を外側に向かって処理します。フレームが深くネストされている場合、または多くの変数がある場合、この検索は高価になる可能性があります。
対照的に、レキシカル アドレッシング ルックアップの手順は、コンパイル時に変数を見つける場所を正確に認識しているため、変数を見つけるのに必要な時間が大幅に短縮されます。
lexical-address-lookup
引数として、環境と、2 つの数値で構成されるレキシカル アドレスを受け取ります: 通過するフレーム数を指定するフレーム番号と、そのフレームで通過する変数の数を指定する変位数です。Lexical-address-lookup
現在の環境に相対的なその字句アドレスに格納されている変数の値を生成します。この操作をマシンに追加すると、.lexical-address-lookup
ではなく、この操作を使用して変数を参照するコードをコンパイラに生成させることができますlookup-variable-value
。