Почему Котлин компилируется быстрее, чем Scala?

Когда мы читаем описание википедии языка программирования Котлин, он заявляет, что:

JetBrains, ведущий Дмитрий Джемеров, сказал, что большинство языков не имеют функций, которые они искали, за исключением Scala. Тем не менее, он процитировал медленное время компиляции Scala как очевидный недостаток. [4] Одной из заявленных целей Kotlin является компиляция так же быстро, как Java.

Как они достигли этой цели? И почему Scala компилирует время так медленно, что это было неприемлемо для создателей Kotlin? Или, другими словами, какие функции компилятора Scala делают его медленнее, чем компилятор Kotlin?

Хотя я думаю, что этот вопрос не очень подходит для Stack Overflow, поскольку он будет иметь тенденцию давать ответы, основанные прежде всего на мнениях, вот одна попытка: у вас есть два разных языка, особенно в отношении системы типов, и две полностью независимые реализации компиляторов. Поэтому ожидать, что у них будет «тот же» тип скорости компиляции, уже является ошибкой. Я связал в своем комментарии с другим вопросом, который анализирует скорость компилятора Scala. В принципе, это зависит от многих факторов, например, от объема работы, который имеет тип inferencer и неявное разрешение, требуемое конкретной кодовой базой.

Тем не менее, я провел очень быстрый пример: я собрал некоторые решения Project Euler в Котлине и Скале. Это дало мне новую переработку всего проекта:

  • 6 секунд в Котлине (до 5 секунд в последующих повторных сборках)
  • 10 секунд в Scala (до 7 секунд в последовательных повторных построениях).

Происхождение исходного кода:

  • Я взял этот код для Kotlin , изменил много импорта, потому что, видимо, стандартная библиотека Kotlin изменилась тем временем, чтобы сделать ее компиляцией.
  • Я взял этот код для Scala и преобразовал его в проект sbt с каждой проблемой, завершенной в object pXY extends App { ... } и поместил его в пакетный euler .

Затем я удалил файлы, для которых существовало только одно решение, в результате чего возникло 26 проблем. Оба проекта были скомпилированы с IntelliJ IDEA 15 CE с использованием Rebuild Project .


Чтобы дать еще один взгляд на этот бизнес, я запустил wc (количество слов) в источниках:

 // lines words bytes 931 3603 33087 total // Kotlin 261 1166 6472 total // Scala 

Итак, теперь вы можете утверждать, что компилятор Kotlin должен обрабатывать «больше исходного кода» или что код Scala был «более плотным» 🙂

Intereting Posts
Можно ли назвать операцию с кодом в Kotlin UNIT TEST Треки жестов с сервисного андроида @Parcelize аннотации toghether с наследованием Почему потоки показывают лучшую производительность, чем сопрограммы? Dagger2 и Kotlin запускают неудачные причины: app: compileDebugKotlinAfterJava Равный оператор не может применяться между примитивной и коробчатой ​​переменной Числа в kotlin не сериализуемы В TornadoFX, как я могу отделить макеты к различным классам, а затем использовать их в построителе? Почему для цикла с тремя точками компилируется? Исключение, вызванное: java.lang.ClassNotFoundException: org.reactivestreams.Publisher Изменение цвета кнопок и цветов progressbar с помощью Anko Преобразование императивной функции root в функциональный стиль в kotlin Как удалить размытие из корневого представления в android Самый простой способ получить возможность hotswap при использовании транспилера kotlin-to-js? Regex не соответствует в Kotlin