【问题标题】:Tailcall elimination in MonoMono 中的尾调用消除
【发布时间】:2012-11-29 00:54:40
【问题描述】:

我有一个大量使用尾递归(用 F# 编程)的 .NET 4.0 应用程序。它在 .NET VM 上运行良好,但在 Mono-3.0.1 上运行出堆栈。

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

有没有办法强制单声道消除尾音? 有没有办法增加单声道的最大堆栈大小?

【问题讨论】:

  • bugzilla.novell.com/show_bug.cgi?id=476785 -- This page 表示正在处理中,但没有预计完成日期。
  • This page 表示 F# 中的尾调用已在 2.12 版中修复
  • 2.12 更名为 3.0;无论如何,它说的是“优化”,而不是“所有优化”,所以我猜 Nikhil 所击中的那个还没有修复
  • 感谢您的回复。关于我的第二个问题的任何想法:即,如何增加单声道的最大堆栈大小?
  • 要更改堆栈大小,请参阅my answer here 了解一种方法。

标签: .net mono


【解决方案1】:

最近有一个非常相似的问题,提供了有用的答案:Stack size under Mono

正如 Robert Harvey 在 cmets 中已经指出的那样,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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多