Schemeから の C++ 関数の呼び出しの効率化


プロファイラを眺めていたときに気がついた、とても軽いと予想される手続の呼び出しが予想以上にコストが高い場合がある。
よくよく調べてみると Scheme から C++で書かれた Scheme 用手続きを呼び出す際のコストが Schemeクロージャを呼び出すよりもコストが高いという計測結果が。
そんな馬鹿なと思い処理を見直してみると、C++ の関数に引数を渡す際に引数を Scheme でいうところのリストにして渡していた。
ああ。これは VMScheme で書かれたときの名残だ。これを改善し SP* を基準に引数を直接参照するようにしたら数%速くなった。