Kotlin
A concise multiplatform language developed by JetBrains
Публикации и ответы на комментарии в блогах JetBrains не выходят на русском языке с 2022 года.
Приносим извинения за неудобства.
Вышел Kotlin 1.4.30: JVM-бэкенд, новые возможности языка и мультиплатформенной разработки
Мы выпустили Kotlin 1.4.30. Это последний инкрементный релиз в преддверии выхода Kotlin 1.5.0, и в него вошло много новых экспериментальных функций, которые мы планируем стабилизировать в версии 1.5.0. Будем признательны, если вы попробуете их и поделитесь с нами своим мнением.
Что нового:
Языковые возможности и компилятор
Каждому из этих двух важных нововведений мы посвятили отдельный блог-пост.
Компилятор
Новый JVM-бэкенд вышел на этап беты и теперь создает стабильные двоичные файлы. А значит, вы можете безопасно использовать его в своих проектах.
Подробную информацию об обновлении, о том, как начать пользоваться IR-бэкендом и помочь нам его стабилизировать, читайте здесь.
Новые возможности языка. Превью
В Kotlin 1.5.0 мы планируем добавить 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 мы ускорили компиляцию. Время пересборки тестового фреймворка KMM Networking and Data Storage сократилось с 9,5 секунд (в версии 1.4.10) до 4,5 секунд (в версии 1.4.30).
Мы будем и дальше оптимизировать компилятор — следите за задачей в YouTrack.
Поддержка 64-битного симулятора watchOS
В октябре 2018 года в версии 1.3.60 мы представили поддержку разработки 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
Отложенная инициализация свойств верхнего уровня
Отложенная инициализация свойств верхнего уровня теперь доступна в качестве экспериментальной функциональности. Подробнее об этом читайте в разделе What’s new.
Стандартная библиотека
API для смены регистра текста независимо от локали
Мы добавили экспериментальный API, не зависящий от локали, для изменения регистра строк и символов. Текущие функции toLowerCase()
, toUpperCase()
, capitalize()
, decapitalize()
зависят от локали, что в некоторых случаях неудобно. Различия в платформенных настройках локали влияют на поведение кода: например, в турецком языке, если преобразовать строку «kotlin» с помощью toUpperCase
, получится «KOTLİN», а не «KOTLIN». Теперь же используется корневая локаль, поэтому преобразование будет выполнено корректно.
Полный список изменений функций обработки текста вы найдете в репозитории KEEP. Этот API является экспериментальным, пожалуйста, делитесь своими впечатлениями в YouTrack.
Понятный API для Char-преобразований
Текущие функции преобразования символа в число, которые возвращают код этого символа в кодировке UTF-16 в разных числовых типах, часто путают с преобразованием String-to-Int, которое возвращает числовое значение строки.
Чтобы избежать путаницы, мы решили разделить Char-преобразования на два набора четко названных функций: функции для получения целочисленного кода Char
и восстановления Char
из имеющегося кода, а также функции для преобразования Char
в числовое значение цифры, которую он представляет.
Пока что это экспериментальная функциональность — мы планируем сделать ее стабильной в версии 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.
Внешние контрибьюторы
Большое спасибо всем внешним контрибьюторам, чьи пулреквесты были включены в этот релиз:
Jinseong Jeon
Toshiaki Kameyama
pyos
Mads Ager
Steven Schäfer
Mark Punzalan
Ivan Gavrilovic
Kristoffer Andersen
Bingran
Juan Chen
zhelenskiy
Kris
Hung Nguyen
Victor Turansky
AJ
Louis CAD
Kevin Bierhoff
Hollow Man
Francesco Vasco
Uzi Landsmann
Dominik Wuttke
Derek Bodin
Ciaran Treanor
rbares
Martin Petrov
Yuya Urano
KotlinIsland
Jiaxiang Chen
Jake Wharton
Sam Wang
MikeKulasinski-visa
Matthew Gharrity
Михаил Лихолетов
Ваша команда Kotlin
The Drive to Develop