Подтвердить что ты не робот

Что делает флаг оптимизатора scala?

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

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

4b9b3361

Ответ 1

Странно, был похожий вопрос в группе scala -user:

Rex Kerr ответил в то время (май):

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

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


Исмаил Джума добавил:

Распределение scala фактически скомпилировано с помощью -оптимизации, но действительно он не включен, если аргумент не передан в scalac.

Является ли он недостаточно зрелым, или это может привести к ошибкам, изменению семантики и т.д.?

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


Для влияния "-optimise" (среди других факторов) в Scala2.9 см. этот scala -язычный поток, называемый Scala2. 9 медленнее? ".

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

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