开发者

What does the 'optimise' scala compiler flag do?

I've tried using scalac -optimise with version 2.7.7. At that time I never got any performance improvements, but the compilation took lo开发者_运维技巧nger.

Is the situation better in Scala 2.9.0 ? What optimisations are currently covered by the flag ?


Strange, there was a similar question on the scala-user group:

Rex Kerr answered at the time (May):

I have never found a case where production code was significantly sped up by using -optimise, at least when using the Sun JVM. I grant that in some cases it could happen, but it seems to apply similar optimizations to what the JVM does already. Perhaps if there are limits on optimization depth, using -optimise would remove a few layers and then allow the JVM to get a few more. But I mostly don't even bother testing it any more, given how many cases (dozens) I've tried it where the runtime hasn't changed measurably.

I expect it would have an impact on VMs that are more conservative (e.g. JRockit) or less sophisticated (e.g. Dalvik).


Ismael Juma added:

The scala distribution is actually compiled with -optimise, but indeed it's not on unless the argument is passed to scalac.

Is it not mature enough, or could it lead to bugs, changed semantic, etc ?

As far as I understand, the team decided to be conservative and enable it only for the scala distribution as an initial step (in Scala 2.8.0). Maybe it's a good idea to consider extending that in the next major release.


For the influence of '-optimise' (amongst other factors) in Scala2.9, see this scala-language thread called "Scala2.9 slower?".

I'm a bit concerned. After seeing that -optimize really does optimize "for comprehensions" on 2.9.0, I then benchmarked the code, and discovered it was about 2.5 times slower than 2.8.1.

The results leave a... mixed feeling.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜