引数渡しの最適化について

メソッド呼び出し時の引数渡しの最適化について。次のようなメソッドがあったとします。

&half = { ( &N )
    N / 2
}

ここで、half関数への引数渡しは、仮引数リストに対するassignメソッドの呼び出しと同価です。

&half = {
    [ &N ].assign( _args )
    N / 2
}

assignメソッドを呼び出すためには、スロット「&N」、仮引数リスト「[ &N ]」、実引数リスト「_args」と、三つのオブジェクトを生成する必要があります。インスタンス生成を減らすため、上記のようなassignメソッドの呼び出しに対して、コンパイラは、オブジェクト群を生成せずに直接変数を定義するような評価器を生成します。 *1

*1:リストのassignメソッドが再定義された際には、処理をショートカットせず、普通にメソッドを呼び出しに行きます