Kotlin logo

Kotlin

A concise multiplatform language developed by JetBrains

Releases

Kotlin 1.5.20 Released!

Kotlin continues to stay up to date with latest Java features such as dynamic invocations and to provide better interoperability with Java by adding support for Java’s Lombok and JSpecify. We are also continuing our work of making the standard library consistent across platforms, as well as investing in Gradle tooling and the new JS IR backend.

Update to Kotlin 1.5.20

This blog post provides an overview of the updates in this release:

Auto-update to Kotlin 1.5.20

If you use IntelliJ IDEA or Android Studio, your IDE will give you the option to automatically update to the new Kotlin release as soon as it becomes available.

Learn more about installing Kotlin 1.5.20.

Kotlin/JVM

To benefit from the latest JVM features, Kotlin has extended the use of dynamic invocations (invokedynamic). Kotlin 1.5.0 brought default support for compilation of SAM adapters, while keeping similar features for string concatenation and lambdas Experimental. Kotlin 1.5.20 makes compilation string concatenation to dynamic invocations the default as well.

To maintain the best interoperability with Java, Kotlin 1.5.20 brings experimental support for:

  • Calling Java’s Lombok-generated methods within the same module. The experimental Lombok compiler plugin allows using Java’s Lombok-generated declarations in mixed Kotlin/Java sources. Lombok annotations work only in Java sources and are ignored if you use them in Kotlin code.
    Supported annotations include @With, @Data, @Getter, @Setter, @NoArgsConstructor, @RequiredArgsConstructor, and @AllArgsConstructor.
  • JSpecify project, which includes a standard unified set of Java nullness annotations. This allows you to provide more detailed nullability information to help Kotlin maintain null safety when interoperating with Java. You can set default nullability for the declaration, package, or module scope, specify parametric nullability, and more. 
    Please note that the JSpecify project is under active development. Its API and implementation can change significantly at any time.

Here is an example of how Kotlin can handle JSpecify annotations:

Kotlin/Native

The Kotlin/Native compiler can now export documentation comments (KDoc) from Kotlin code to Objective-C frameworks. This will make these comments visible to the framework’s consumers. This support also works for Swift, and it is Experimental

Another improvement concerns the Array.copyInto() operation inside one array. It now works up to 20 times faster (depending on the number of objects being copied) due to memory management optimization for this case.

Kotlin/JS

Kotlin 1.5.0 has already delivered the new Stable JVM IR backend, so the only missing piece of the new Kotlin IR backend is the Stable JS part. We’re continuing our work to make the Kotlin/JS IR backend Stable, and your feedback would really help us.

An easy way to migrate to the new JS backend is to follow our new migration guide. The guide describes the changes you’ll need to make in your Kotlin/JS code to make it work with the new IR compiler. If you encounter any issues, please report them to our issue tracker, YouTrack.

Gradle

Kotlin 1.5.20 delivers a couple of tooling improvements:

Standard library

Kotlin 1.5.20 continues to provide a similar experience on all platforms for standard library Char features:

  • isLowerCase()/isUpperCase() now provides the same result on all platforms by checking all characters, not only letters.
  • digitToInt() now supports all Unicode digit characters for all platforms – Kotlin/JVM, Kotlin/Native, and Kotlin/JS. Previously, it provided full support only for Kotlin/JVM.

Stay up to date with information about the latest Kotlin features! Enter your email address and subscribe to Kotlin updates using the form to the right of the post.

How to install Kotlin 1.5.20

If you already use IntelliJ IDEA or Android Studio, your IDE will suggest updating Kotlin to 1.5.20 automatically. You can also update it manually by following these instructions

You can always download the latest versions of these IDEs to get extensive support for Kotlin:

  • IntelliJ IDEA for developing Kotlin applications for different platforms.
  • Android Studio for developing Android and cross-platform mobile applications.

Make sure that you have also updated the kotlinx libraries to compatible versions and specified version 1.5.20 of Kotlin in the build scripts of your existing projects.

If you need the command-line compiler, download it from the Github release page.

If you run into any problems

Read and watch more

External contributors 👏👏👏

We’d like to thank all of our external contributors whose pull requests were included in this release:

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


Update to Kotlin 1.5.20

Releases

Вышел Kotlin 1.5.20

В этой версии Kotlin добавлена поддержка новых возможностей Java, включая динамические вызовы, а также улучшена совместимость с Java благодаря поддержке Lombok и JSpecify. Кроме этого, мы продолжаем добиваться единообразной работы стандартной библиотеки на всех платформах, а также развиваем инструменты Gradle и новый IR-бэкенд JS.

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

В этой статье вас ждет обзор обновлений, появившихся в новой версии:

Автоматическое обновление до 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 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.

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

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

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

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 1.5.20

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

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