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


Answers

Существует два аспекта (отсутствия) скорости для компилятора Scala.

  1. Большие начальные загрузки

    • Сам Scalac состоит из LOT классов, которые должны быть загружены и скомпилированы jit

    • Scalac должен искать путь к классам для всех корневых пакетов и файлов. В зависимости от размера вашего пути к классу это может занять от одной до трех дополнительных секунд.

    В целом, ожидайте накладные расходы на запуск скаляра 4-8 секунд, дольше, если вы запустите его в первый раз, так что кеши дисков не будут заполнены.

    Ответ Scala на накладные расходы на запуск - либо использовать fsc, либо делать непрерывное построение с помощью sbt. IntelliJ должен быть настроен на использование любого параметра, в противном случае его накладные расходы даже для небольших файлов необоснованно велики.

  2. Медленная скорость компиляции. Scalac управляет около 500 до 1000 линий / сек. Джавак управляет примерно в 10 раз. На это есть несколько причин.

    • Вывод типа является дорогостоящим, в частности, если он подразумевает неявный поиск.

    • Scalac должен дважды проверять тип; один раз согласно правилам Scala и во второй раз после стирания в соответствии с правилами Java.

    • Помимо проверки типов существует около 15 шагов преобразования, чтобы перейти от Scala к Java, что требует времени.

    • Scala обычно генерирует гораздо больше классов на определенный размер файла, чем Java, особенно если функциональные идиомы сильно используются. Генерация байтокода и запись класса требуют времени.

    С другой стороны, 1000-строчная программа Scala может соответствовать программе Java на 2-3K, поэтому некоторая более медленная скорость, когда подсчитывается в строках в секунду, должна быть сбалансирована с большей функциональностью в каждой строке.

    Мы работаем над улучшением скорости (например, путем создания файлов классов параллельно), но нельзя ожидать чудес на этом фронте. Scalac никогда не будет так быстро, как javac. Я считаю, что решение будет заключаться в компиляции серверов, таких как fsc, в сочетании с хорошим анализом зависимостей, чтобы только перекомпилировать только минимальный набор файлов. Мы тоже работаем над этим.

Question

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

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

Поэтому я хотел спросить, могу ли я сделать Scala быстрее скомпилировать и будет быстрее, чем когда бы то ни было javac.




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

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

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




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

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




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

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

Короче: найдите оптимальный рабочий шаблон, который лучше подходит для Scala.






Related