同時通訳って見たこと無いから行ってみたい気もする。(学校に)帰ってきたら、末尾再帰の話が盛り上がってますね。コメントへはコメントで返すようにしてたんですが、長くなりそうなんで、こちらに。ページに移すほうがいいような気もするんですが、どこが適当かわからないので現状維持。セキュリティモデルの話は知りませんでした。そのこと書いてなかったようですし。実装することはあるとは思うんですが、言語の概念がCPSだとはちょっと思えないんですが。天に唾吐く行為ですね。延長だと思っていたので、やっぱり関数を呼んで戻って。それで、末尾の場合は特殊な最適化をするから、どんどん末尾再帰を使えよ、という言語だと思っています。こんな話を書いたのは、RubyVMで末尾再帰の最適化を行うにはどんな方法がいいのか、というのが最近の暇つぶしのネタだからです。電車の中でこういうこと考えていると、すぐ目的の駅につきます(それか眠くなるか)。具体的には、スタックフレームの構造なんですが。考えていてスタックトレースどーすんだろ、と思って。考えたのが中田さんの言うように、ほかに情報をストアする何かを作るスタックトレースをスッパリ諦めるその他だと思いました。リストか何かを作ると、もちろんその分容量食うし、そもそもそれを消すのはどうするのか。固定長配列だと、それの長さが制限になる。ダイナミックにすると、そいつをGCさせるのは、(性能向上のために末尾再帰最適化やってんのに)全然遅くなりそう。ループしたらきっとメモリ足りません。Ruby的に良くない解決方法だと思いました。デバッグのし易さが著しく落ちると思います。リリースモードではその最適化をかけて、開発は通常で行う、ということが考えられます。末尾再帰最適化はオプションで、リリース時だけそれでやってね、というのはもしかしたらいい考えかもしれない。(普通やってば)でも、全部情報が落ちるのもなんかアレな気がする。Rubyらしくない(わかりづらい)。妥協点として考えたのは、スタックフレームに末尾再帰を何回したか、という情報を加える。これならデバッグの指標になるような気がするし、末尾再帰ごとに必要になるメモリがない。利用、ってことになるんだと思う。考えてるんですが、安直かしら。自分では結構ナイスな妥協だと思ってるんだけど。なんか綺麗な数字になったな。私は、デザインパターンの本の序文などを見る度にあの素敵な音楽を思い出してしまうんですが、皆様はどうなのかなと思った次第です。ちなみに、GoFは同人ゲームじゃありません。