我喜歡Scala的理解力以及它們與任何帶有地圖和flatMap的monadic類型的整合方式。但是,我也想做簡單的整數循環,而不會造成主要的速度損失。爲什麼Scala沒有以下兩個邏輯上相同的循環運行時具有相似的運行時性能,甚至編譯成相似的字節碼?爲什麼Scala for循環比邏輯上的循環慢?
// This is slow...
for (i <- 0 until n) println(s"for loop with $i")
// This runs much faster. It runs roughly at the same speed as Java code doing an identical while or for loop.
var i = 0;
while (i < n) {
println(s"while loop with $i")
i += 1
}
確認一下...你*的*與編譯'-optimize',不是嗎? –
@KevinWright:我很難找到'-optimize'選項實際所做的任何描述。你有沒有指向任何描述其效果的指針? –
@RandallSchulz它隨着版本的不同而不同,但您可以在這裏得到一個公平的想法:http://magarciaepfl.github.io/scala/ –