Mono中的尾调用消除

19

我有一个使用尾递归(用F#编写的)的.NET 4.0应用程序。在.NET VM上运行得很好,但在Mono-3.0.1上会导致栈溢出。

我尝试使用mono --optimize=tailc运行,但似乎没有改变任何东西。

有没有办法强制Mono消除尾调用? 有没有办法在Mono中增加最大堆栈大小?


1
https://bugzilla.novell.com/show_bug.cgi?id=476785 -- 该页面显示正在开发中,但没有预计完成日期。 - Robert Harvey
这个页面(http://www.mono-project.com/Mono_Project_Roadmap)显示,在版本2.12中修复了F#中的尾调用问题。 - Robert Harvey
2.12被重命名为3.0;而且它说的是“优化”,而不是“所有优化”,所以我猜Nikhil遇到的问题还没有解决。 - knocte
1
谢谢您的回复。对于我的第二个问题,您有什么想法吗?即如何在Mono中增加最大堆栈大小? - Nikhil Swamy
要更改堆栈大小,请参见我的答案中的一种方法。 - chue x
1个回答

1

有一个非常相似的问题,有很多有用的答案: Mono下的堆栈大小

正如Robert Harvey在评论中指出的那样,对于F#,Mono的尾调用支持存在错误/不完整 (bug 476785: F#的尾调用支持)。解决此问题的方法在 Mono运行时正在进行的项目列表 中。

堆栈大小可以通过使用System.Threading.Thread构造函数或PE头文件来增加。但是,System.Threading.Thread的方式 在Mono中不起作用。如果要更改PE,则可能需要使用MS Visual Studio,因为可能没有其他方法来使用其{{link3:editbin.exe /stack}}。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接