Rubyの呼び出しスタックの深さ制限値を広げることはできるか
Rubyで、再帰呼び出しの回数が深すぎると、スタックオーバーフローになる。 再帰を多様する関数型プログラミングスタイルでコーディングなんかすると頻繁にスタックオーバーフローを目にすることになる。 例
tail_recursion_normal.rb:7: stack level too deep (SystemStackError)
[Nendo]の末尾再帰最適化をやろうとして、ふと思った。「Ruby側のstackの深さ制限を緩和すれば、そこそこ深い再帰呼び出しをしても実用レベルでは問題にならないんじゃないだろうか」
結論。その考えは甘かった。 CRuby 1.9.2 preview3 のソースを見たのだが、CRubyが採用しているGCの制約でMARKが届く範囲までしかstackの拡張を許していないようだ。 ということは、現状の設定が理論値上の最大値に設定してあるということなのだろう。 そんな楽な道はあきらめて、ちゃんと末尾再帰最適化にチャレンジしよう。安心して再帰が書けるようにしよう。