末尾呼出と最適化
ある関数Aが、Bを呼ぶだけの場合、Bの呼び出しをジャンプで呼び出すと、スタック消費が無いとか、諸々最適化できるという話。
コレが Tail call optimization なわけですが、Scalaの2.8では自動でやるどことか、Trampoline for Tail Call までやるらしい。
説明が面倒なので、関連論文ペタリ。
http://www.cs.tsukuba.ac.jp/H13Syuron/005337.pdf
早い話が2関数の相互呼び出し再起において、末尾呼び出し最適化を行うという話。
ちょっと目に止まった面白い言語仕様。
昔ボードゲームのAI作るのに再起しまくって落ちて、ループ展開した記憶があるけど、昨今は便利なものね。
もっとも F# とか Haskell 使えばそもそも期にしなくて良いのだけれどw