次のコードはslow1 = 1323 ms
、 、slow2 = 1311 ms
およびになりfast = 897 ms
ます。そんなことがあるものか?
ここ:ネストされているかネストされていない if ブロック? 彼らはそれについて言及します
最新のコンパイラ、つまり過去 20 年間に構築されたものはすべて、これらを同じコードにコンパイルします。
let s = System.Diagnostics.Stopwatch()
let mutable a = 1
s.Start()
for i in 0 .. 1000000000 do
if i < 0 then
if i < 0 then
a <- 4
printfn "fast = %d" s.ElapsedMilliseconds
s.Restart()
for i in 0 .. 1000000000 do
if i < 0 && i < 0 then
a <- 4
printfn "slow1 = %d" s.ElapsedMilliseconds
s.Restart()
for i in 0 .. 1000000000 do
if i < 0 & i < 0 then
a <- 4
printfn "slow2 = %d" s.ElapsedMilliseconds