考虑这段代码:
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。
我应该期待这么长的编译时间还是这是编译器的问题/错误?
我认为,至少对于您正在尝试的实际代码而言,这是具有误导性的标题。
让我们帮助类型推断器...
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(重写代码并重新编译)。在显式路由器阶段之后,REPL 似乎在某个地方陷入困境(尝试使用
scala -Xprint:all
)。
在 Scala 2.9.0.1 上,只要你给 scalac 足够的堆栈空间,编译(和运行)就可以了:
export JAVA_OPTS="-ss128M"
scalac arrays.scala
虽然它在 REPL 中似乎不起作用,但这不再让我感到惊讶......