下面是一段代码示例,乍一看,它看起来像是scalac
可以轻松优化掉的东西:
val t0 = System.nanoTime()
for (i <- 0 to 1000000000) {}
val t1 = System.nanoTime()
var i = 0
while (i < 1000000000) i += 1
val t2 = System.nanoTime()
println((t1 - t0).toDouble / (t2 - t1).toDouble)
上面的代码打印出来76.30068413477652
,随着迭代次数的增加,这个比率似乎变得更糟。
是否有特殊原因scalac
选择不优化为生成的for (i <- L to/until H)
任何字节码形式?可能是因为 Scala 选择保持简单,并期望开发人员在需要原始循环速度时简单地求助于性能更高的形式,例如循环?如果是,考虑到如此简单的 for 循环的频率,为什么这么好?javac
for (int i = L; i < H; i += 1)
while