私は最近、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 を使用しています。