在阅读了一些有关Mono 2.6垃圾收集器不足之处的报道之后,我决定给Mono 2.10一个机会.我发现2.10运行时崩溃了以下简单的F#程序:
let rec f x acc =
if x = 0 then acc
else f (x - 1) (acc + 1)
f 10 0
Run Code Online (Sandbox Code Playgroud)
等效循环C#代码运行得很好,就像F#hello world程序一样.F#代码也适用于Mono 2.6和.Net.其他人可以重现这个吗?这是一个错误还是只是我的安装?
以下是我尝试的各种运行时间和结果.
单声道2.10.2(从Debian Squeeze的源代码编译)
-- "Stack overflow: IP: 0x4153bb84, fault addr: (nil)"
Run Code Online (Sandbox Code Playgroud)Mono 2.8(源自Debian Squeeze的资源)
-- "Native stacktrace: ..."
Run Code Online (Sandbox Code Playgroud)单声道2.10.2(Windows二进制)
-- "mono.exe has stopped working" dialog.
Run Code Online (Sandbox Code Playgroud)单声道2.10.2(VMware映像)
-- Segmentation fault
Run Code Online (Sandbox Code Playgroud)单声道2.6.7(与Debian Squeeze捆绑在一起)
-- Works fine
Run Code Online (Sandbox Code Playgroud)使用的F#编译器来自2010年11月的CTP.
我将F#中的事件暴露给C#,如下所示:
let event = new DelegateEvent<EventHandler>()
member x.Ping() = event.Trigger([| x; EventArgs.Empty |])
[<CLIEvent>]
member x.PingEvent = event.Publish
Run Code Online (Sandbox Code Playgroud)
但是我想在添加或删除处理程序时运行一些代码.我认为这可以在C#中完成,如下所示:
public event EventHandler PingEvent
{
add
{
//do something
}
remove
{
//do something
}
}
Run Code Online (Sandbox Code Playgroud)
如何在F#中编写以上内容?