Скорость компиляции Java против скорости компиляции Scala

Я программировал в Scala некоторое время, и мне это нравится, но одна вещь, которая меня раздражает, это время, необходимое для компиляции программ. , Это кажется мелочью, но с помощью Java я мог бы внести небольшие изменения в свою программу, нажмите кнопку запуска в NetBeans, и BOOM, он работает, и со временем компиляция в Scala, кажется, занимает много времени. Я слышал, что во многих крупных проектах язык сценариев становится очень важным из-за того, что на компиляцию уходит много времени, и я не видел такой необходимости, когда я использовал Java.

Но я пришел из Java, которая, насколько я понимаю, , быстрее, чем любой другой скомпилированный язык, и быстро из-за причин, по которым я перешел на Scala (это очень простой язык).

Итак, я хотел спросить, могу ли я заставить Scala компилироваться быстрее, и будет ли scalac всегда таким же быстрым, как javac.

97
задан skaffman 27 November 2011 в 15:23
поделиться

5 ответов

Компилятор Scala более сложен, чем компилятор Java, обеспечивая вывод типов, неявное преобразование и гораздо более мощную систему типов. Эти функции не предоставляются бесплатно, поэтому я не ожидал, что scalac когда-либо будет так же быстр, как javac. Это отражает компромисс между программистом, выполняющим работу, и компилятором, выполняющим работу.

Тем не менее, время компиляции уже заметно улучшилось при переходе от Scala 2.7 к Scala 2.8, и я ожидаю, что улучшения продолжатся и сейчас, когда пыль осела на 2.8. Эта страница документирует некоторые текущие усилия и идеи по повышению производительности компилятора Scala.

Мартин Одерский дает гораздо более подробную информацию в своем ответе.

55
ответ дан 24 November 2019 в 05:18
поделиться

Последние версии Scala-IDE (Eclipse) намного лучше справляются с управлением инкрементной компиляцией.

Подробнее см. « Какая система сборки Scala лучшая? ».


Другое решение - интегрировать fsc - быстрый автономный компилятор для языка Scala 2 - (как показано в этом сообщении блога ) в качестве сборщика в вашей среде IDE.

alt text

Но не в напрямую Eclipse, как Даниэль Спивак упоминает в комментариях:

Вы не должны использовать FSC напрямую в Eclipse, хотя бы потому, что Eclipse уже используя FSC под поверхностью.
FSC - это, по сути, тонкий слой поверх резидентного компилятора, который является именно тем механизмом, который Eclipse использует для компиляции проектов Scala.


Наконец, как Джексон Дэвис напоминает мне в комментариях:

sbt (Simple build Tool) также включает некую «инкрементную» компиляцию (через запускаемое выполнение ]), хотя он не идеален , а улучшенная инкрементная компиляция находится в разработке для предстоящей версии 0.9 sbt.

8
ответ дан 24 November 2019 в 05:18
поделиться

Используйте fsc - это быстрый компилятор scala, который сидит как фоновая задача и не требует постоянной загрузки. Он может повторно использовать предыдущий экземпляр компилятора.

Я не уверен, что плагин Netbeans scala поддерживает fsc (в документации сказано, что да), но я не смог заставить его работать. Попробуйте ночные сборки плагина.

6
ответ дан 24 November 2019 в 05:18
поделиться

Я уверен, что за это проголосуют меньше, но чрезвычайно быстрое выполнение не всегда способствует качеству или продуктивности.

Уделяйте время более тщательному обдумыванию и выполняйте меньше микроциклов разработки. Хороший код на Scala более плотный и более существенный (т.е. свободный от случайных деталей и сложности). Он требует более тщательного обдумывания, а это требует времени (по крайней мере, вначале). Вы можете успешно продвигаться с меньшим количеством циклов код/тестирование/отладка, которые по отдельности немного длиннее, и при этом повышать свою производительность и качество работы.

Короче говоря: ищите оптимальную схему работы, лучше подходящую для Scala.

2
ответ дан 24 November 2019 в 05:18
поделиться

Лучший способ сделать Scala — использовать IDEA и SBT. Настройте элементарный проект SBT (который он сделает за вас, если хотите) и запустите его в режиме автоматической компиляции (команда ~compile), и когда вы сохраните свой проект, SBT перекомпилирует его.

Вы также можете использовать подключаемый модуль SBT для IDEA и прикрепить действие SBT к каждой из ваших конфигураций запуска. Плагин SBT также предоставляет интерактивную консоль SBT в IDEA.

В любом случае (SBT работает извне или подключаемый модуль SBT) SBT продолжает работать, и, таким образом, все классы, используемые при создании вашего проекта, «прогреваются» и JIT-обрабатываются, а начальные накладные расходы устраняются. Кроме того, SBT компилирует только те исходные файлы, которые в этом нуждаются. На сегодняшний день это самый эффективный способ создания программ Scala.

19
ответ дан 24 November 2019 в 05:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: