速さのためなら for より while

VMScala で書いてて得た知見。(再検証せずに書いてますので間違ってたら教えてください)

for (i <- 0 until 100) { ... }

より

var i = 0
while (i < 100) { ...; i += 1 }

の方がとっても速い。
for にすると for の中身が (Java レベルの) 別クラスになるため、かなり遅いみたい。

object Main {
  val v1 = ...
  def foo {
    foo(i <- 0 until 100) {
      v1 を使う
    }
  }
}

みたいなの書くと、v1 の参照が別クラスのメソッド呼び出しになるようで、そのせいかわからないけれど相当遅かった。while にすれば同じクラスのメソッド呼び出しになるため、インライン展開されるのか多少マシになった。しょんぼり。速く最適化されろー。