这个问题之前已经出现过,John Palmer 回答了它的原因: 为什么 Seq.iter 和 Seq.map 这么慢?
let ar = Array.zeroCreate<int> (64*1024*1024)
#time
//Real: 00:00:00.171, CPU: 00:00:00.171, GC gen0: 0, gen1: 0, gen2: 0
for i in 0 .. ar.Length - 1 do
ar.[i] <- ar.[i]*3
//Real: 00:00:00.327, CPU: 00:00:00.328, GC gen0: 0, gen1: 0, gen2: 0
ar |> Array.iteri(fun i _ -> ar.[i] <- ar.[i]*3)
//Real: 00:00:02.249, CPU: 00:00:02.250, GC gen0: 0, gen1: 0, gen2: 0
ar |> Seq.iteri(fun i _ -> ar.[i] <- ar.[i]*3)
我想知道是否有某种“内联”或其他通用机制可以映射,比如将序列映射到(它最后知道的?)具体类型以加速这些行为。例如,在这里我有静态保证我将遍历一个数组。
您知道理论上存在对此的满意解决方案吗?(会有什么花哨的名字?)
是否有一些语言可以很好地承认和解决这个问题?