Mosh の apply が末尾最適化ではなかった
Issue 204 - mosh-scheme - receive(call-with-values) primitive does not perform proper-tail-recursionというバグを調査していたら問題は apply であることが分かった。apply の末尾呼び出しがうまく最適化されておらず再帰ごとに 2 word スタックを使う構造になっていた。
しかも複雑なことをやっており 1 回 apply が呼び出されるごとに heap のアロケーションも発生していた。よくよく考えれば apply は引数をうまく調整したあとに call インストラクションに処理を引き継げばよいのでその通り実装したらシンプルになった。