2010-10-31 113 views
4

考慮到CLR支持尾部呼叫優化我在想如果單聲道,並因此Mono上運行的Ironpython是否支持TCO?Mono/Ironpython中的尾部呼叫優化

+0

你可以很容易地測試這個。只需設置一個無限的尾調用遞歸併讓它運行;要麼爆炸要麼沒有爆炸。 – 2010-10-31 04:34:13

+0

如果你可以運行一個簡單的'def f():return f()'並且內存使用保持不變,那麼你知道至少有一些基本級別的尾部調用優化正在發生,當然這並沒有告訴你它的侷限性。 – 2010-10-31 04:47:28

+0

[單聲道運行時是否已經按照IL規範的要求處理了尾部呼叫優化?]可能的重複(http://stackoverflow.com/questions/3816148/does-the-mono-runtime-already-handle-tail-call我的興趣更多地是在單聲道而不是單聲道本身上運行的Ironpython – tzot 2010-10-31 10:54:19

回答

4

我不能給出明確的答案,但論壇(例如here)有足夠的證據,因爲Mono不使用callee-pops-arguments調用約定,它不能(很容易)支持tail調用。有幾個未解決的錯誤,herehere,表明F#仍在等待這個。

+0

非常感謝您的幫助+1 – srean 2010-10-31 03:29:31

+0

嗨@Marcelo我還沒有接受答案,只是爲了防止有權威的回答。我懷疑你的答案將會在不久的將來得到確定。在這種情況下是否有一個SO接受約定,我在這裏是新的,所以我不知道。 – srean 2010-11-01 04:04:26

+0

沒有硬性規定。只要給它一段時間,然後當你認爲你已經看到最好的答案時點擊打勾。 – 2010-11-01 06:10:00