2012-11-29 117 views
19

我有一個.NET 4.0應用程序,大量使用尾遞歸(在F#中編程)。它在.NET VM上運行良好,但在Mono-3.0.1上運行不足。單聲道消除尾聲

我試過用mono --optimize=tailc運行,但這似乎沒有改變任何東西。

有沒有辦法強制單聲道消除尾巴呼叫? 有沒有辦法增加單聲道的最大堆棧大小?

+1

https://bugzilla.novell.com/show_bug.cgi?id=476785 - [This page](http://www.mono-project.com/Runtime_Projects)表示正在處理,但沒有投影完成日期。 –

+0

[This page](http://www.mono-project.com/Mono_Project_Roadmap)表示F#中的尾部呼叫在版本2.12中修復了 –

+0

2.12被重命名爲3.0;無論如何它說「優化」,而不是「所有優化」,所以我猜Nikhil正在打的那個還沒有修復。 – knocte

回答

1

有一些有用的答案非常相似的更近的問題:Stack size under Mono

正如羅伯特·哈維在評論中已經指出,爲F#單打破了/不完整的尾調用支持(bug 476785: Tail call support in F#)。解決這個問題是on Mono's runtime ongoing projects list

堆棧大小可以使用System.Threading.Thread構造函數或在PE頭中增加。但是,System.Threading.Thread的方式does not work in Mono。爲了改變PE,你可能需要need MS Visual Studio,因爲editbin.exe /stack可能無法替代。