3

下面是一段代码示例,乍一看,它看起来像是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 循环的频率,为什么这么好?javacfor (int i = L; i < H; i += 1)while

4

1 回答 1

3

Scala 中的理解性能目前是一个长期存在的争论。

请参阅以下链接:

TL,DR:Scala 团队决定专注于更一般的优化,而不是那些必须支持某些特定类和边缘情况的优化(在这种情况下:)Range

于 2013-09-23T13:58:26.367 回答