Следующий код приводит к slow1 = 1323 ms
, slow2 = 1311 ms
и fast = 897 ms
. Как это возможно?
Здесь: Вложенные или не вложенные if-blocks? они упоминают, что
Любой современный компилятор, и я имею в виду все, что было построено за последние 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