各ブラウザのJSランタイムがどこまで再帰できるか試してみた、という。

誰でも一度は試すと思うんだけどV8がなんかtailcall最適化してそうで気になったのでためしてみました!
Windows上の各ブラウザしかしらべてません。完全にへたれです。

試したやつ

つかったコード

1秒おきに再帰した回数が表示されるというだけです。深さ制限があると途中で数字の増加が止まるはず。

<html>
<head>
<title>tailcall</title>
<script type="text/javascript">
var c = 0;
function doit() {
    c++;
    doit();
}
window.onload = function() {
    setInterval(function() { document.body.innerHTML += c + "<br />"; }, 1000);
    doit();
};
</script>
</head>
<body>
</body>
</html>

結果

Firefox 3000
Safari 499
Internet Explorer 2552*1
Opera 9998
Chrome 21838

Chromeだけ異常に突出していますが、それにしてもこの半端な数字はなんなのでしょうねー。
ちなみに実装的にはIEが一番まともだと思った。サイレントに再帰を中止するなんてありえないと思うのですが。

*1:「スタック領域が不足しています」というエラーが発生