技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

末尾呼出と最適化

ある関数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