不幸的是,由于 .NET 缺乏增量 GC(在 MS 或 Mono 实现中),使用 F# 构建诸如游戏之类的软实时软件是有问题的。
这里有几点:
我在 .NET 3 上用 OCaml 测量了 10 毫秒的典型暂停时间,用 F# 测量了 30 毫秒。通过一个简单的实现,我能够从头开始在 F# 中构建一个容错服务器,它可以处理 20k msgs/s 和 50% 的延迟时间低于 114us 和95% 低于 500us。
我用 F# 编写了一种语言,如果 -
a) 面对分代 GC(交互式模拟期间的任意停顿,以及
我不会放弃这个平台,因为你的第一个工作版本有不可接受的延迟。您可以做很多事情来降低最大延迟。
b) OCaml 获得了到 LLVM 后端的良好完整端口 -
我严重怀疑 OCaml 是否会得到我认为的“到 LLVM 后端的良好完整端口”。他们只会使用当前的无类型 IR 重新定位 LLVM,并且它不会比当前的ocamlopt
编译器做得更好,因为 LLVM 并非旨在优化这种工作负载。
我会将它从 F# 移植到 OCaml。我尽可能多地避免使用特定于 .NET 的库,并且由于 F# 的语法基于 OCaml,我假设应该有一些自动化工具来帮助转换代码。
没有自动化工具,但我现在在 OCaml 和 F# 之间移植了数十万行代码,这通常非常容易,因为大多数代码都是用两种语言的核心 ML 子集编写的。