Kotlin
A concise multiplatform language developed by JetBrains
Публикации и ответы на комментарии в блогах JetBrains не выходят на русском языке с 2022 года.
Приносим извинения за неудобства.
Вышел Kotlin 1.5.30
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.
В этой статье мы рассказываем об основных нововведениях:
- Язык: 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:
- Возможность использовать пользовательские библиотеки
cinterop
в общем нативном коде. Это позволяет шире делиться библиотеками для отдельных платформ, которые поставляются вместе с Kotlin/Native. - Поддержка формата вывода XCFrameworks для всех проектов Kotlin Multiplatform. XCFrameworks помогает объединить логику для всех целевых платформ и архитектур в единый пакет. Вам не потребуется удалять лишние архитектуры перед публикацией приложения в магазине приложений.
- Новая настройка публикации по умолчанию для артефактов Android. Настройка по умолчанию совместима с любым типом сборки (например,
debug
илиrelease
). Раньше метаданные, созданные Gradle-плагиномmaven-publish
при публикации мультиплатформенной библиотеки для Android, включали в себя атрибут типа сборки для каждого опубликованного варианта Android. В результате она была совместима только с тем же типом сборки, что и у пользователя библиотеки.
Kotlin/JVM
В версии Kotlin 1.5.30 вас ждут следующие обновления для Kotlin/JVM:
- Улучшено конфигурирование поддержки аннотаций допустимости значения null. Можно указать, должен ли компилятор сообщать о несоответствии допустимости значения null, исходя из информации, предоставленной конкретными типами аннотаций. Узнайте, как включить эту функцию, и ознакомьтесь с полным перечнем поддерживаемых аннотаций допустимости значения null — теперь в него включены аннотации RxJava3.
- Создание объектов классов аннотаций. После включения этой функции можно вызывать конструкторы классов аннотаций в произвольном коде, чтобы получить нужный экземпляр. Функция охватывает те же сценарии использования, что и стандарт Java, обеспечивая реализацию интерфейса аннотаций. Подробнее о создании объектов классов аннотаций читайте в KEEP.
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:
- IR-бэкенд компилятора JS переведен на стадию бета-версии. Для упрощения перехода на новый бэкенд можно воспользоваться руководством по миграции и новым IDE-плагином Kotlin/JS Inspection Pack, который поможет внести необходимые изменения прямо в IntelliJ IDEA.
- Улучшенная отладка приложений с IR-бэкендом Kotlin/JS благодаря генерации карт источников JavaScript. Это обеспечивает поддержку точек останова, пошаговой отладки и читаемых трассировок стека с правильными ссылками на источник в любом отладчике JavaScript. Читайте подробнее об отладке приложений 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 из строк, имеющих формат DurationtoString()
или соответствующих стандарту 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-страницы релиза.
Если вы столкнулись с проблемами
- Получите помощь в Slack (по приглашению).
- Сообщите о проблеме в наш баг-трекер YouTrack.
Следите за новостями о возможностях Kotlin! Чтобы подписаться на рассылку об обновлениях языка, заполните форму справа от статьи.
Что еще посмотреть и почитать
- Видео «Что нового в Kotlin 1.5.30»
- Документация для версии 1.5.30
- Статья о Kotlin 1.5.20
- Статья о Kotlin 1.5.0
- План развития 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
Автор оригинальной статьи: