Компьютерные игры Benchmarks Game Запись F # для Threadring содержит, казалось бы, бесполезную строку: if false then ()
. Когда я прокомментирую эту строку, программа работает намного быстрее (~ 2s против 55 секунд для ввода 50000000) и дает тот же результат. Как это работает? Почему эта линия там? Что именно делает компилятор с тем, что кажется нерабочим?
Код:
let ringLength = 503
let cells = Array.zeroCreate ringLength
let threads = Array.zeroCreate ringLength
let answer = ref -1
let createWorker i =
let next = (i+1)%ringLength
async { let value = cells.[i]
if false then ()
match value with
| 0 -> answer := i+1
| _ ->
cells.[next] <- value - 1
return! threads.[next] }
[<EntryPoint>]
let main args =
cells.[0] <- if args.Length>0 then int args.[0] else 50000000
for i in 0..ringLength-1 do
threads.[i]<-createWorker i
let result = Async.StartImmediate(threads.[0])
printfn "%d" !answer
0