考虑以下代码:
Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array(Array())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
几分钟后我中止了REPL。
我是否应该期待如此长的编译时间,或者这是编译器的问题/错误?
答案 0 :(得分:6)
我认为,至少就你正在尝试的实际代码而言,误导性的标题。
让我们帮助类型推理器......
object A extends App {
val x = Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Array[Nothing]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]()
println(x)
}
编译得很好并且运行得很好(我甚至不需要修改JVM选项):
$ time scalac -d classes A.scala
real 0m5.179s
$ time scala -cp classes A
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[Ljava.lang.Object;@872380
real 0m2.461s
所以它更多的是编译和类型推断,包括REPL(重写代码和重新编译)。在显式路由阶段(尝试使用scala -Xprint:all
)之后,REPL似乎在某处挣扎。
答案 1 :(得分:5)
在Scala 2.9.0.1上,只要你给scalac足够的堆栈空间,这就编译(并运行)就好了:
export JAVA_OPTS="-ss128M"
scalac arrays.scala
它似乎在REPL中不起作用,但这不会让我感到惊讶......