私はこれまでのところ 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 は何かに不満を持っているようです。
本質的に、私は次のことを知りたいです:
- Node.js は TCO を実行しますか?
yield
この魔法のようなものが Node.js でどのように機能するのでしょうか?