Kotlin
A concise multiplatform language developed by JetBrains
Публикации и ответы на комментарии в блогах JetBrains не выходят на русском языке с 2022 года.
Приносим извинения за неудобства.
Вышел Kotlin 1.5.20
В этой версии Kotlin добавлена поддержка новых возможностей Java, включая динамические вызовы, а также улучшена совместимость с Java благодаря поддержке Lombok и JSpecify. Кроме этого, мы продолжаем добиваться единообразной работы стандартной библиотеки на всех платформах, а также развиваем инструменты Gradle и новый IR-бэкенд JS.
В этой статье вас ждет обзор обновлений, появившихся в новой версии:
- улучшения Kotlin/JVM, включая конкатенацию строк через
invokedynamic
, а также экспериментальную поддержку вызова методов, сгенерированных Java Lombok, и аннотаций JSpecify относительно значения null; - улучшения Kotlin/Native, включая экспериментальную поддержку экспорта комментариев KDoc в заголовки Objective-C;
- руководство по миграции на IR-бэкенд Kotlin/JS;
- улучшения Gradle, включая параллельное выполнение задач Kotlin;
- улучшения стандартной библиотеки для обеспечения единообразного преобразования символов на всех платформах.
Автоматическое обновление до Kotlin 1.5.20
Если вы пользуетесь IntelliJ IDEA или Android Studio, IDE предложит автоматически обновиться до новой версии Kotlin, как только она выйдет.
Подробнее об установке Kotlin 1.5.20.
Kotlin/JVM
Мы расширили использование динамических вызовов (invokedynamic
) в Kotlin, чтобы можно было воспользоваться новыми возможностями JVM. В Kotlin 1.5.0 появилась поддержка компиляции SAM-адаптеров по умолчанию, а поддержка конкатенации строк и лямбд осталась в статусе экспериментальной. В Kotlin 1.5.20 компиляция конкатенации строк в динамические вызовы также поддерживается по умолчанию.
Для обеспечения максимальной совместимости с Java мы ввели в Kotlin 1.5.20 экспериментальную поддержку следующих функций:
- Вызов методов Java, сгенерированных Lombok, в том же модуле. Экспериментальный плагин компилятора Lombok позволяет использовать объявления Java, сгенерированные Lombok, в смешанном исходном коде Kotlin/Java. Аннотации Lombok работают только в исходном коде Java и игнорируются, если использовать их в коде Kotlin.
Поддерживаемые аннотации:@With
,@Data
,@Getter
,@Setter
,@NoArgsConstructor
,@RequiredArgsConstructor
и@AllArgsConstructor
.
- Проект JSpecify, который включает в себя стандартный унифицированный набор аннотаций Java относительно значения null. Они позволяют дать подробную информацию о допустимости значения null, чтобы обеспечить null-безопасность при работе Kotlin с Java. Можно указать допустимость значения null по умолчанию для объявлений, пакетов или модулей, задать параметрическую допустимость значения null и т. д.
Обратите внимание: проект JSpecify активно разрабатывается, поэтому его API и реализация могут значительно меняться.
Вот пример обработки аннотаций JSpecify в Kotlin:
Kotlin/Native
Теперь компилятор Kotlin/Native может экспортировать документирующие комментарии (KDoc) из кода Kotlin во фреймворки Objective-C. Благодаря этому комментарии станут видны пользователям фреймворков. Эта экспериментальная функция. Она также поддерживается для Swift.
Еще одно улучшение касается операции Array.copyInto()
внутри одного массива. Теперь в зависимости от количества копируемых объектов она может выполняться до 20 раз быстрее благодаря оптимизации управления памятью.
Kotlin/JS
В Kotlin 1.5.0 уже появился новый стабильный IR-бэкенд JVM, и теперь новому IR-бэкенду Kotlin не хватает только стабильной части для JS. Мы работаем над стабилизацией IR-бэкенда Kotlin/JS, и нам очень нужны ваши отклики.
О том, как перейти на новый бэкенд JS, читайте в нашем новом руководстве по миграции. Там описаны необходимые изменения в коде Kotlin/JS, чтобы его можно было использовать с новым IR-компилятором. Если у вас возникнут какие-то проблемы, сообщите об этом в баг-трекере YouTrack.
Gradle
В Kotlin 1.5.20 были сделаны некоторые улучшения инструментов:
- Теперь контроль параллельного выполнения задач Kotlin полностью возложен на механизм параллельного выполнения Gradle. Поддержка
свойства kotlin.parallel.tasks.in.project
прекращена. - Мы внедрили экспериментальное кэширование загрузчиков классов обработчиков аннотаций kapt. Это позволяет в некоторых случаях ускорить работу kapt при последовательных запусках Gradle.
Стандартная библиотека
С выходом Kotlin 1.5.20 мы продолжаем добиваться, чтобы функции стандартной библиотеки по преобразованию символов работали одинаково на всех платформах:
isLowerCase()
/isUpperCase()
теперь выдает одинаковый результат на всех платформах и проверяет все символы, не только буквы;digitToInt()
теперь поддерживает все числовые символы Unicode на всех платформах — Kotlin/JVM, Kotlin/Native и Kotlin/JS. Раньше полная поддержка была обеспечена только для Kotlin/JVM.
Следите за новостями о новых возможностях Kotlin! Чтобы подписаться на рассылку, посвященную обновлениям Kotlin, введите адрес электронной почты в форму справа от статьи.
Как установить Kotlin 1.5.20
Если вы уже пользуетесь IntelliJ IDEA или Android Studio, IDE автоматически предложит вам обновиться до версии 1.5.20. Также вы можете обновить версию вручную — следуйте этой инструкции.
Для полной поддержки Kotlin вы всегда можете скачать последние версии этих IDE:
- IntelliJ IDEA — разработка приложений на Kotlin для разных платформ.
- Android Studio — разработка приложений под Android и кросс-платформенных мобильных приложений.
Также проверьте, что вы обновили библиотеки kotlinx до совместимых версий и указали версию Kotlin 1.5.20 в билд-скриптах ваших проектов.
Скачать компилятор для командной строки можно с GitHub-страницы релиза.
Если вы столкнулись с проблемами
- Обратитесь за помощью в канале в Slack (воспользуйтесь этим приглашением).
- Сообщите о проблеме в наш баг-трекер, YouTrack.
Что еще посмотреть и почитать
- Видео о новых возможностях Kotlin 1.5.20
- Документация по новым возможностям Kotlin 1.5.20
- Статья в блоге о Kotlin 1.5.0
Внешние контрибьюторы
Мы очень благодарны всем внешним контрибьюторам, чьи пулреквесты были включены в этот релиз:
Alexey Stepanov, Jinseong Jeon, Tianyu Geng, Mark Punzalan, pyos, Mike Sinkovsky, Aleksey Kladov, Mads Sig Ager, Steven Schäfer, Ting-Yuan Huang, Victor Turansky, scaventz, Stefan M, Carlos Ballesteros Velasco, StefMa, Mattia Iavarone, Florian Kistner, Julius Kunze, Sergey Rubanov, Matthew Gharrity, enbandari, Campbell Jones, Br0mm, Kevin Galligan, yantimirov-timur, Ben Asher, Julia, Jared Woolston, Federico Tomassetti, Jens Klingenberg, Nicola Corti, vldf, Dominic Fischer, Martin Petrov, Renee Vandervelde, Robert Hencke, Rodrigo B. de Oliveira, Jeffrey McNally-Dawes, Scott Pierce, Sebsatian Keller, James Wald, Hyojae Kim, hungvietnguyen, Him188, Henrik Tunedal, AJ Alt, Giuseppe Barbieri, Francis Lavoie, Dico Karssiens, Dave Leeds, Thiago Henrique Hüpner, Thomas Vos, Daniel, Collin Monahan, Toshiaki Kameyama, Tristan Greeno, Vanessa Pyne, Charlie Jiang, Cedric Champeau, Boris Pristupa, Bingran, youta ogino, Aydar Mukhametzyanov, Ying Li, Zac Sweers, zadorotskas, ebukreev, kdnakt, 0xflotus, Abhishek Sudhakaran, Marcin Aman, Marcin Kraszewski, Matt Chowning, luca992, Lucas Diego, Louis CAD, Michael Blackman, Michael Hoisie, Lidonis Calhau, LanderlYoung, Kyle Kauffman, Miquel Beltran, Mohit Jayanti Gurumukhani, Muhammad Hakim Asy’ari, Márton Braun, Nekoyue, Nick Apperley, toxicbakery, KotlinIsland, Kjell Winblad, Kevin Waldock, Nils Kunze, Noah, Nwokocha wisdom maduabuchi, Paul Idstein, Keegan Witt, Jonas Seibert, Jiaming Lu
Ваша команда Kotlin
The Drive to Develop
Автор оригинальной статьи: