Releases

Вышел Kotlin 1.5.30

Read this post in other languages:
English, Français, 简体中文

Kotlin 1.5.30 — последний инкрементальный релиз перед выходом 1.6.0. В него вошло много экспериментальных функций языка и стандартной библиотеки, которые мы планируем включить в версию Kotlin 1.6.0. Попробуйте эти возможности и поделитесь с нами своими впечатлениями. Мы учтем ваши отзывы при подготовке окончательной версии. В числе экспериментальных функций — sealed-выражения when, изменения в требованиях согласия на использование функций, создание объектов классов аннотаций, улучшения API Duration и Regex стандартной библиотеки и многое другое.

Кроме того, в Kotlin 1.5.30 появилась нативная поддержка Apple Silicon, IR-бэкенд Kotlin/JS получил статус бета-версии, в общем нативном коде мультиплатформенных приложений теперь можно использовать пользовательские библиотеки cinterop, а Gradle-плагин Kotlin поддерживает тулчейны Java.

Установить Kotlin 1.5.30

В этой статье мы рассказываем об основных нововведениях:

  • Язык: sealed-выражения when, поддержка функций suspend как супертипов и изменения в требованиях согласия на использование функций.
  • Мультиплатформенная разработка: возможность использовать пользовательские библиотеки cinterop в общем нативном коде и поддержка формата вывода XCFrameworks.
  • Kotlin/JVM: создание объектов классов аннотаций и улучшенное конфигурирование поддержки аннотаций допустимости значения null.
  • Kotlin/Native: нативная поддержку Apple Silicon и улучшенный Kotlin DSL для Gradle-плагина CocoaPods.
  • Kotlin/JS IR: перевод IR-бэкенда JS на стадию бета-версии и улучшение процесса отладки в IR-бэкенде.
  • Gradle: поддержка тулчейнов Java и более простые способы явного задания аргументов JVM для демона Kotlin.
  • Стандартная библиотека: улучшения для API Duration и Regex.

Автоматическое обновление до Kotlin 1.5.30

Если вы пользуетесь IntelliJ IDEA или Android Studio, то сможете автоматически обновиться до новой версии Kotlin, как только она выйдет.

Подробнее об установке Kotlin 1.5.30.

Примечание: последняя версия IntelliJ IDEA — 2021.2 — не поддерживает Kotlin 1.5.30. Если вы уже перешли на эту версию, можно установить IntelliJ IDEA 2021.1 с помощью JetBrains Toolbox App и использовать Kotlin 1.5.30 в этой версии или дождаться выхода Kotlin 1.5.31.

Язык

В план развития Kotlin включено добавление поддержки sealed-выражений when, выпуск аннотаций требования согласия, улучшение вывода типов и стабилизация вывода в билдерах. 

Kotlin 1.5.30 — еще один шаг к реализации этого плана: в ней появятся предварительные версии этих функций, которые затем будут включены в версию 1.6.0.

Sealed-выражения when

Sealed-выражения when вы ждете с нетерпением: у этой функции более 280 голосов в YouTrack. Если включить ее в версии 1.5.30, компилятор Kotlin предупредит вас, если одно из выражений when не будет исчерпывающим. В результате ваш код станет безопаснее, и вам не придется вводить собственные функции.

Попробуйте эту функцию и поделитесь своими впечатлениями в комментариях к задаче в YouTrack

Поддержка функций suspend как супертипов

Kotlin 1.5.30 предлагает попробовать использовать функциональные типы suspend как суперинтерфейсы, но у этой возможности есть определенные ограничения. Это один из недостающих элементов поддержки корутин Kotlin.

Включите эту функцию и оставьте свой отзыв в YouTrack.

Изменения в требованиях согласия на использование функции

Kotlin 1.5.30 делает еще один шаг к выпуску аннотаций согласия на использование функций:

  • Вводятся новые правила использования и объявления аннотаций требования согласия в различных целевых элементах. 
  • Требуется согласие даже для неявного использования экспериментального API. Например, если тип возвращаемого значения функции помечен как элемент экспериментального API, пользователь должен дать согласие на использование этой функции, даже если ее объявление не помечено явно как требующее согласия.

Попробуйте использовать измененные функции и поделитесь отзывом в тикете YouTrack

Подробнее о требованиях согласия на использование функции

Улучшения вывода для рекурсивных универсальных типов

При включенной функции вывода для рекурсивных универсальных типов компилятор Kotlin 1.5.30 может вывести аргумент типа, опираясь только на верхние границы диапазона соответствующего параметра рекурсивного универсального типа. Благодаря этому можно создавать разнообразные шаблоны с рекурсивными универсальными типами, которые часто используются в Java для API билдеров.

Устранение ограничений вывода в билдерах

В версии Kotlin 1.5.30 можно включить устранение ограничений вывода в билдерах. При этом можно не только задать информацию типа, которая будет выводиться, но и использовать для нее функцию get. Например, можно вызывать get() в лямбда-аргументе buildList(), не указывая явным образом аргументы типа.

Kotlin Multiplatform

В Kotlin 1.5.30 появились следующие улучшения для Kotlin Multiplatform:

Kotlin/JVM

В версии Kotlin 1.5.30 вас ждут следующие обновления для Kotlin/JVM:

Kotlin/Native

В Kotlin 1.5.30 появились следующие улучшения для Kotlin/Native:

  • Нативная поддержка Apple Silicon. Теперь можно создавать приложения на оборудовании Apple Silicon для любых целевых платформ, которые поддерживаются компьютерами Mac на базе Intel, без помощи транслятора Rosetta. Новые целевые платформы, добавленные в 1.5.30, — macosArm64, iosSimulatorArm64, watchosSimulatorArm64 и tvosSimulatorArm64, — обеспечивают нативное выполнение кода Kotlin на Apple Silicon. 
  • Улучшенный Kotlin DSL для Gradle-плагина CocoaPods. В Kotlin 1.5.30 улучшено конфигурирование CocoaPods благодаря новому формату DSL для фреймворков, который совпадает с определением фреймворка для целевых платформ Apple. Его можно задать как статический или динамический тип, включить явный экспорт зависимостей и встраивание Bitcode, а также настроить другие параметры.
  • Экспериментальная совместимость со Swift 5.5 async/await. Узнайте подробнее об актуальном состоянии совместимости со Swift 5.5 и оставьте отзыв в YouTrack.
  • Прекращение поддержки связывания DLL без библиотек импорта для MinGW (Windows). Поддержка прекращена в связи с переходом на компоновщик LLD, который работает эффективнее и предлагает ряд других улучшений. Соображениями и опасениями в связи с переходом на компоновщик LLD можно поделиться в YouTrack.
  • Улучшенное сопоставление объектов и компаньонов для Swift/Objective-C. Теперь доступ к объектам и компаньонам стал более интуитивно понятным для iOS-разработчиков, поскольку при этом используются свойства .shared и .companion

Kotlin/JS

В Kotlin 1.5.30 появились следующие улучшения для Kotlin/JS:

Gradle

В Kotlin 1.5.30 добавлены функции, упрощающие работу пользователей Gradle-плагина Kotlin:

  • Поддержка тулчейнов Java. В Gradle 6.7 была введена поддержка тулчейнов Java, благодаря чему стало удобно выбирать JDK для компиляции проекта. Просто объявите нужную версию в билд-скрипте, а Gradle сделает остальное: найдет эту версию на сервере, а если ее там нет, даже скачает и установит ее. Плагин Kotlin Gradle поддерживает использование тулчейнов Java в задачах компиляции Kotlin/JVM. Для версий Gradle 6.1-6.6 настройте местоположение JDK с помощью интерфейса UsesKotlinJavaToolchain.
  • Более простые способы явно указать аргументы JVM для демона Kotlin. Если аргументы демона Kotlin не указаны, они наследуются из демона Gradle. Кроме того, теперь можно задать аргументы для отдельной задачи или для расширения Kotlin отдельной строкой в build.gradle.kts или gradle.properties.

build.gradle.kts

gradle.properties

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

В Kotlin 1.5.30 появились улучшения для API Duration и Regex стандартной библиотеки.

Улучшения API Duration

В соответствии с планом развития библиотек, мы собираемся стабилизировать API Duration в версии Kotlin 1.6.0. Сейчас у нас есть последняя возможность опробовать эту функцию и собрать ваши пожелания относительно возможных изменений. Будем очень благодарны за отзывы в KEEP.

Kotlin 1.5.30 предлагает предварительную версию улучшений API. Результаты выполнения Duration.toString() стали понятнее. Например, Duration.minutes(920).toString() теперь выдает 15h 20m, а не 920m.

Перед отрицательным значением продолжительности теперь ставится знак минус (-), а значение, состоящее из нескольких компонентов, заключается в скобки: -12m и -(1h 30m).

Кроме того, в этот релиз включены предварительные версии новых функций вычленения продолжительности (Duration) из строки (String):

  • parse() вычленяет объекты Duration из строк, имеющих формат Duration toString() или соответствующих стандарту ISO 8601 для указания продолжительности (например, выходных значений toIsoString());
  • parseIsoString() вычленяет объекты Duration из строк, содержащих значения продолжительности по стандарту ISO 8601;
  • *OrNull() — аналоги для обеих функций, которые выдают null, если нет возвращаемых значений.

Улучшения API Regex

В Kotlin 1.5.30 появилось несколько новых экспериментальных функций для регулярных выражений:

  • matchesAt() проверяет, есть ли для регулярного выражения соответствие в заданном месте строки;
  • matchAt() возвращает найденное значение;
  • splitToSequence() — «ленивый» аналог split(). Она делит строку вокруг соответствий заданному регулярному выражению, но возвращает результат в виде Sequence. Аналогичная функция добавлена к CharSequence.

Как установить Kotlin 1.5.30

Если вы пользуетесь IntelliJ IDEA или Android Studio, IDE автоматически предложит вам обновиться до версии 1.5.30. Также можно обновить версию вручную — следуйте этой инструкции

Для полной поддержки Kotlin вы всегда можете скачать свежие версии этих IDE:

  • IntelliJ IDEA — разработка приложений на Kotlin для разных платформ;
  • Android Studio — разработка приложений под Android и кросс-платформенных мобильных приложений.

Не забудьте обновить библиотеки kotlinx до совместимых версий и указать версию Kotlin 1.5.30 в билд-скриптах ваших проектов.

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

Если вы столкнулись с проблемами

Следите за новостями о возможностях Kotlin! Чтобы подписаться на рассылку об обновлениях языка, заполните форму справа от статьи.

Что еще посмотреть и почитать

Внешние контрибьюторы 👏👏👏

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

Jinseong Jeon, pyos, Tianyu Geng, Mark Punzalan, Mads Ager, Ivan Gavrilovic, Steven Schäfer, Vladimir Ivanov, Hung Nguyen, Matthew Gharrity, Jiaxiang Chen, Ivan Kochurkin, Iaroslav Postovalov, Toshiaki Kameyama, Udi Cohen, Xin Wang, bracadabra

Ваша команда Kotlin
The Drive to Develop

Автор оригинальной статьи:

Oksana Mandryka

Ekaterina Volodko

Discover more