'optimize'scala编译器标志有什么作用?

par*_*tic 24 compiler-construction performance scala compiler-optimization

我尝试使用-optimise版本2.7.7的scalac .那时我从来没有得到任何性能改进,但编译花费的时间更长.

Scala 2.9.0中的情况更好吗?国旗目前涵盖哪些优化措施?

Von*_*onC 15

奇怪的是,scala-user组中存在类似的问题:

Rex Kerr当时回答(5月):

我从未发现-optimise使用Sun JVM至少在使用Sun JVM时显着加快生产代码的情况.我承认在某些情况下它可能会发生,但它似乎对JVM已经采用了类似的优化.也许如果优化深度有限制,使用-optimise将删除几个层,然后允许JVM获得更多.但考虑到运行时间没有发生变化的情况,我尝试了多少个案例(几十个),我大多不再费心去测试了.

我预计它会对更保守的VM(例如JRockit)或不太复杂的VM(例如Dalvik)产生影响.


Ismael Juma补充道:

scala发行版实际上是用-optimise编译的,但实际上除非将参数传递给scalac,否则它不会打开.

它不够成熟,还是会导致错误,语义变化等?

据我了解,该团队决定保守,只为scala发布启用它作为初始步骤(在Scala 2.8.0中).也许考虑在下一个主要版本中扩展它是个好主意.


对于-optimiseScala2.9中"(以及其他因素)的影响,请参阅这个称为"Scala2.9较慢的scala语言线程?" .

我有点担心.在看到它-optimize确实在2.9.0上优化了"for comprehensions"后,我对代码进行了基准测试,发现它比2.8.1慢了约2.5倍.

结果留下了......混合的感觉.

  • 从scala编译器编写者那里获得关于scala 2.11的这个标志状态的明确答案会很高兴 (13认同)