我最近注意到 F# Interactive 比编译版本快得多(在发布或调试模式下)。这是一个例子:
let rec fib n = if n < 3 then 1 else fib (n-1) + fib (n-2)
[<EntryPoint>]
let rec main argv =
let w = System.Diagnostics.Stopwatch()
w.Start()
fib 45
w.Stop()
printfn "%d" w.ElapsedMilliseconds
System.Console.ReadLine()
0
在发布模式下编译时,运行此输出“12784”,在 F# Interactive 中运行时输出“4986”。我使用“main [||];;”在交互模式下运行它。
肯定会发生一些奇怪的事情,但我不知道是什么!
编辑[规格]:. NET 4 的 F# 3.0。优化代码和生成尾调用标志已设置,我正在为 x86 编译。我在 i7 950 上运行它。我正在使用 Visual Studio 2012。