From: SASADA Koichi Date: 2007-05-21T14:23:38+09:00 Subject: [ruby-dev:30800] tail call optimization  ささだです.  末尾呼び出しの最適化機能を,きちんと考えて使えるようにしてみました.前 から処理自体は入ってたんですが,少し真面目に考え直して使えるようにしただ けです. def rec n rec n-1 if n > 0 end rec 100000  こんなプログラムも動きます.  ただし,デフォルトでは使えないようになっています(実行時に切り替え可 能).これは,挙動がいろいろと変わるからです.具体的には, ・スタックトレースが変わる(callerの返り値も) ・スタックオーバーフローエラーが出なくなる場合がある というのが顕著だと思います.他にもあるかもしれませんが,とりあえず思いつ きません.  この機能どうしましょう. (1) これでRubyでも関数型プログラミングが出来るぞ,とふれまわる (2) Rubyに合わないから機能をなかった事にする(消す) (3) 知っている人しか使わないような,隠し機能にする   例えば ObjC 拡張や python like ブロックとかと同じ (3') とりあえず入れておくが,もうちょっと,仕様を検討する  ちなみに,いわゆる末尾再起の最適化(自分自身への jump に変換)ではな く,末尾呼び出しの最適化で,スタックがあふれないように細工したものです. なので,高速化にはあんまり寄与していません. -- // SASADA Koichi at atdot dot net