35

私はこれまでのところ JavaScript が好きで、Node.js をエンジンとして使用することに決めました。その理由の 1は、Node.js が TCO を提供すると主張している . ただし、Node.js でこの (明らかに末尾呼び出し) コードを実行しようとすると、スタック オーバーフローが発生します。

function foo(x) {
    if (x == 1) {
        return 1;
    }
    else {
        return foo(x-1);
    }
}

foo(100000);

今、私はいくつかの掘り出し物をしました、そして私はこれを見つけまし. ここでは、次のように書くべきだと言っているようです。

function* foo(x) {
    if (x == 1) {
        return 1;
    }
    else {
        yield foo(x-1);
    }
}

foo(100000);

ただし、これにより構文エラーが発生します。私はそれのさまざまな順列を試しましたが、すべての場合において、Node.js は何かに不満を持っているようです。

本質的に、私は次のことを知りたいです:

  1. Node.js は TCO を実行しますか?
  2. yieldこの魔法のようなものが Node.js でどのように機能するのでしょうか?
4

4 に答える 4

4

node.js は、2016.05.17、バージョン 6.2.0以降、最終的に TCO をサポートします。

--use-strict --harmony-tailcallsTCO が機能するには、フラグを付けて実行する必要があります。

于 2016-03-01T20:34:18.317 に答える