单声道2.10上的F#崩溃

问题描述:

在阅读了关于Mono 2.6垃圾收集器的不足之处后,我决定给Mono 2.10一个去。我发现,2.10运行时崩溃,下面简单的F#程序:单声道2.10上的F#崩溃

let rec f x acc = 
    if x = 0 then acc 
    else f (x - 1) (acc + 1) 

f 10 0 

等效循环C#代码运行得很好一样的F#的Hello World程序。 F#代码也适用于Mono 2.6和.Net。其他人可以重现吗?这是一个错误还是只是我的安装?

以下是我尝试过的各种运行时和结果。

  • 单2.10.2(从源在Debian挤压编译)

    -- "Stack overflow: IP: 0x4153bb84, fault addr: (nil)" 
    
  • 单声道2.8(从源在Debian挤压编译)

    -- "Native stacktrace: ..." 
    
  • 单声道2.10.2( Windows二进制)

    -- "mono.exe has stopped working" dialog. 
    
  • 单2.10.2(VMware映像)

    -- Segmentation fault 
    
  • 单2.6.7(捆绑了Debian的挤压)

    -- Works fine 
    

使用的F#编译器是从2010年11月CTP。

+8

授予您尝试过的平台/配置的数量,这显然是Mono中的一个错误。请打开一个错误并附上可执行文件。谢谢。 – 2011-05-15 19:29:21

+1

这可能是由于Mono缺少尾部呼叫优化。看到这里http://flyingfrogblog.blogspot.com/2009/01/mono-does-not-support-tail-calls.html。 – sashang 2011-05-15 21:08:18

+3

@sashang:当我遇到这个时,我正在测试Mono的尾部呼叫处理过程。我怀疑这是因为a)它在小输入上崩溃,b)生成的代码不包含任何尾部调用,只有命令循环。 – petebu 2011-05-15 21:21:52

我已经报告过这个问题,因为bug#693905在https://bugzilla.novell.com/show_bug.cgi?id=693905

+0

现已解决(2011年6月) – Justin 2011-07-08 03:42:21