変更ログインタープリターでの末尾呼び出しの除去
Rhino のインタープリターモードに、末尾呼び出しの除去(=tail-call elimination) が実装されました。 関数が、別の関数の呼び出しの結果を返す場合に、必要以上のスタック空間の消費を回避するものです。 インタープリターでの「継続」のサポート
Rhino のインタープリターモードは、継続 (continuation) をサポートします【訳注: 参考 RhinoWithContinuations】。 このコードのアイデアの基になるのは、「継続」のオリジナル実装である Christopher Oliver と、SISC プロジェクトによるものです。 「継続」を使うためには、最適化レベルを -1 に セットすることによってインタープリターモードを選択するか、 あるいは、Rhino shell (を起動する時)のコマンドラインに -opt -1 を付け加える必要があります。
実装の詳細と、Java と JavaScript の「継続」の API は、今後、互換性を保たない方向で変更されるかもしれないことに注意してください。
Rhinoは継続と末尾再帰サポートしてんだって。
call/ccはこんな感じだそうです、
function call_with_current_continuation(fun) {
var kont = new Continuation();
return fun(kont);
}
スゲー。