タグ付けされた質問 「tail-call-optimization」



4
JVMがまだテールコール最適化をサポートしていないのはなぜですか?
does-the-jvm-prevent-tail-call-optimizationsの 2年後、プロトタイプの 実装があり、MLVMはしばらくの間、この機能を「proto 80%」としてリストしています。 JVMで言及されているように、テールコールのサポートにSun / Oracleの側から積極的な関心はありませんか、それとも、テールコールが「すべての機能優先度リストで2番目に来ると運命づけられている [...]」だけです。言語サミット? 誰かがMLVMビルドをテストし、それがどれほどうまく機能するかについての印象を(もしあれば)共有できたら、私は本当に興味があります。 更新: Avianのような一部のVM は、問題なく適切な末尾呼び出しをサポートしています。

4
Haskellには末尾再帰最適化がありますか?
今日、UNIXで「time」コマンドを発見し、Haskellの末尾再帰関数と通常の再帰関数のランタイムの違いを確認するのに使用すると思いました。 私は以下の関数を書きました: --tail recursive fac :: (Integral a) => a -> a fac x = fac' x 1 where fac' 1 y = y fac' x y = fac' (x-1) (x*y) --normal recursive facSlow :: (Integral a) => a -> a facSlow 1 = 1 facSlow x = x * …

3
コードが末尾呼び出しの最適化を積極的に防止しようとするのはなぜですか?
質問のタイトルは少し奇妙かもしれませんが、私が知る限り、末尾呼び出しの最適化に反対するものは何もありません。しかし、オープンソースプロジェクトを閲覧しているときに、コンパイラが末尾呼び出しの最適化を実行するのを積極的に阻止しようとするいくつかの関数にすでに遭遇しました。たとえば、そのようなハックでいっぱいのCFRunLoopRefの実装です。例えば: static void __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__() __attribute__((noinline)); static void __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__(CFRunLoopObserverCallBack func, CFRunLoopObserverRef observer, CFRunLoopActivity activity, void *info) { if (func) { func(observer, activity, info); } getpid(); // thwart tail-call optimization } なぜこれがそれほど重要に見えるのか知りたいのですが、通常の開発者として私もこれを念頭に置いておく必要がある場合はありますか?例えば。末尾呼び出しの最適化に関する一般的な落とし穴はありますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.