+38/044/257-2444
+38/067/502-3306
+38/050/370-3627
Новости

Kotlin 1.4.30: JVM-бэкенд, новые возможности языка

Kotlin 1.4.30: JVM-бэкенд, новые возможности языка

JetBrains выпустил Kotlin 1.4.30. Это последний инкрементный релиз в преддверии выхода Kotlin 1.5.0, и в него вошло много новых экспериментальных функций, которые JetBrains планирует стабилизировать в версии 1.5.0.

Что нового:

  • Языковые возможности и компилятор
    • Новый JVM-бэкенд вышел на этап беты.
    • Классы значений, JVM-записи и sealed-интерфейсы.
  • Инструменты сборки
    • Поддержка кэша конфигурации в Gradle-плагине.
  • Kotlin/Native
    • Ускоренная компиляция.
    • Поддержка 64-битного симулятора watchOS.
    • Поддержка Xcode 12.2.
  • Kotlin/JS
    • Отложенная инициализация свойств верхнего уровня.
  • Стандартная библиотека
    • API для смены регистра текста независимо от локали.
    • Понятный API для Char-преобразований.

Языковые возможности и компилятор

Компилятор

Новый JVM-бэкенд вышел на этап беты и теперь создает стабильные двоичные файлы. А значит, вы можете безопасно использовать его в своих проектах.

Новые возможности языка. Превью

В Kotlin 1.5.0 JetBrains планирует добавить inline-классы значений, JVM-записи и sealed-интерфейсы.

Inline-классы. Inline-классы раньше были отдельной языковой конструкцией, а теперь представляют собой специальную JVM-оптимизацию класса значений с одним параметром. Классы значений — более широкий концепт, и в дальнейшем они будут поддерживать различные оптимизации. Сейчас они поддерживают inline-классы, а впоследствии будут поддерживать примитивные классы Valhalla, когда проект Valhalla будет завершен.

Java records (записи). Еще одно предстоящее улучшение экосистемы JVM — это записи. Они аналогичны классам data в Kotlin и в основном используются как простые носители данных. Совместимость с Java всегда была для нас в приоритете. Kotlin-код «понимает» новый синтаксис Java и рассматривает записи как классы со свойствами Kotlin.

Sealed-интерфейсы. Как и классы, интерфейсы могут быть объявлены запечатанными. Модификатор sealed работает точно так же: все реализации sealed-интерфейса известны во время компиляции. После компиляции модуля с sealed-интерфейсом новые реализации появиться не могут.

Инструменты сборки

Поддержка кэша конфигурации в Gradle-плагине

Начиная с Kotlin 1.4.30, плагин Kotlin Gradle совместим с кэшем конфигурации Gradle. Это ускоряет процесс сборки. Например, команда Square использует Kotlin для Android, и их сборка состоит из 1800 модулей (Android, Java, Kotlin). Они сообщили нам следующие цифры:

  • Самая первая сборка заняла 16 минут 30 секунд.
  • Вторая была намного короче — 5 минут 45 секунд.
    В случае Square кэш конфигурации экономит 1 минуту 10 секунд на создание конфигурации и построение графа задач при каждой сборке.

Когда вы запускаете команду, Gradle выполняет фазу конфигурации и строит граф задач. Результаты кэшируются и используются повторно при последующих сборках, экономя ваше время.

Чтобы попробовать, воспользуйтесь командой Gradle или настройте свою IDE. 

Обратите внимание, что для мультиплатформенной разработки эта функция все еще находится на этапе альфа.

Kotlin/Native

Ускоренная компиляция

В версии 1.4.30 JetBrains ускорили компиляцию. Время пересборки тестового фреймворка KMM Networking and Data Storage сократилось с 9,5 секунд (в версии 1.4.10) до 4,5 секунд (в версии 1.4.30).

JetBrains будет и дальше оптимизировать компилятор — следите за задачей в YouTrack.

Поддержка 64-битного симулятора watchOS

В октябре 2018 года в версии 1.3.60 JetBrains представили поддержку разработки Kotlin-приложений для симуляторов Apple Watch. В ноябре прошлого года симулятор Apple Watch был переведен с архитектуры i386 на x86_64, что вызвало ряд проблем у разработчиков. Для запуска симулятора watchOS на 64-битной архитектуре в Kotlin/Native можно использовать новый таргет watchosX64. Это работает на WatchOS, начиная с версии 7.0.

Поддержка Xcode 12.2

Kotlin/Native теперь поддерживает Xcode 12.2. С новой версией Kotlin вы можете использовать macOS-фреймворки, поддерживаемые в Xcode 12.2. Например, теперь для разработчиков macOS-приложений доступен MLCompute.

Kotlin/JS

Отложенная инициализация свойств верхнего уровня

Отложенная инициализация свойств верхнего уровня теперь доступна в качестве экспериментальной функциональности.

Стандартная библиотека

API для смены регистра текста независимо от локали

JetBrains добавили экспериментальный API, не зависящий от локали, для изменения регистра строк и символов. Текущие функции toLowerCase()toUpperCase()capitalize()decapitalize() зависят от локали, что в некоторых случаях неудобно. Различия в платформенных настройках локали влияют на поведение кода: например, в турецком языке, если преобразовать строку «kotlin» с помощью toUpperCase, получится «KOTLİN», а не «KOTLIN». Теперь же используется корневая локаль, поэтому преобразование будет выполнено корректно.

Полный список изменений функций обработки текста вы найдете в репозитории KEEP. Этот API является экспериментальным, пожалуйста, делитесь своими впечатлениями в YouTrack.

Понятный API для Char-преобразований

Текущие функции преобразования символа в число, которые возвращают код этого символа в кодировке UTF-16 в разных числовых типах, часто путают с преобразованием String-to-Int, которое возвращает числовое значение строки.

Чтобы избежать путаницы, JetBrains решили разделить Char-преобразования на два набора четко названных функций: функции для получения целочисленного кода Char и восстановления Char из имеющегося кода, а также функции для преобразования Char в числовое значение цифры, которую он представляет.

Пока что это экспериментальная функциональность — JetBrains планирует сделать ее стабильной в версии 1.5.0. Больше информации — в репозитории KEEP.

Подробнее о версии 1.4.30 читайте в разделе What’s new и в статьях про JVM-бэкенд и языковые возможности.

Как обновиться

IntelliJ IDEA предложит обновить Kotlin-плагин до версии 1.4.30 автоматически, но можно сделать это и вручную по инструкции. Плагин для Android Studio Arctic Fox будет выпущен позже.

Если вы работаете над проектами, созданными с помощью предыдущих версий Kotlin, укажите версию Kotlin 1.4.30 в конфигурации проекта. Подробности — в разделах документации о Gradle и Maven.

Скачать компилятор для командной строки можно с GitHub-страницы релиза.

Если возникнут проблемы, обращайтесь за помощью в Slack-канал и сообщайте об ошибках в баг-трекере.

Прежде чем обновлять проекты до последней версии языка, попробуйте новые возможности Kotlin и стандартной библиотеки на сайте play.kotl.in.

Другие новости