Что делает флаг компилятора scala «optimize»? - PullRequest
24 голосов
/ 15 июля 2011

Я пытался использовать scalac -optimise с версией 2.7.7.В то время я никогда не улучшал производительность, но компиляция заняла больше времени.

В Scala 2.9.0 ситуация лучше?Какие оптимизации в настоящее время покрыты флагом?

1 Ответ

15 голосов
/ 15 июля 2011

Странно, был подобный вопрос в группе пользователей scala :

Рекс Керр ответил в то время (май):

Я никогда не встречал случая, чтобы производственный код был значительно ускорен используя -optimise, по крайней мере, при использовании Sun JVM. Я допускаю, что в некоторых В некоторых случаях это может произойти, но, похоже, к подобным JVM уже делает. Возможно, если существуют ограничения по глубине оптимизации, использование -optimise удалит несколько слоев, а затем позволит JVM получить еще несколько. Но я в основном даже не пытаюсь это проверить, учитывая, как во многих случаях (десятки) я пробовал, когда время выполнения не изменилось измеримо.

Я ожидаю, что это повлияет на более консервативные виртуальные машины (например, JRockit) или менее изощренный (например, Dalvik).


Исмаэль Джума добавлено:

Дистрибутив scala фактически скомпилирован с -optimise, но на самом деле он не включен, если аргумент не передан в scalac.

Разве он недостаточно зрелый или может привести к ошибкам, измененной семантике и т. Д.?

Насколько я понимаю, команда решила быть консервативной и это только для распространения Scala в качестве начального шага (в Scala 2.8.0). Может быть, это хорошая идея рассмотреть вопрос о расширении этого в следующем основной выпуск.


Чтобы узнать о влиянии '-optimise' (среди других факторов) в Scala2.9, см. ветку на языке скала под названием "Scala2.9 slower?" .

Я немного обеспокоен. Увидев, что -optimize действительно оптимизирует «для понимания» на 2.9.0, я затем провел тестирование кода и обнаружил, что он примерно в 2,5 раза медленнее, чем 2.8.1.

Результаты оставляют ... смешанное чувство.

...