1. Улучшения компилятора K2
Теперь в Kotlin используется новый компилятор K2. Он быстрее и эффективнее. Если при работе с ним возникнут проблемы, можно временно вернуть старый компилятор, добавив в файл gradle.properties строку:
kapt.use.k2=false
Также появилась поддержка аннотации @SuperBuilder из библиотеки Lombok. Она упрощает создание объектов, особенно если есть наследование классов.
2. Kotlin Multiplatform (KMP): новый способ настройки приложений
В этой версии появился новый способ настройки приложений для разных платформ. Теперь вместо плагина Application в Gradle используется блок executable {}. Он помогает настраивать задачи и распределение для JVM-целей. Пример использования можно найти в официальной документации.
3. Kotlin/Native: новые оптимизации
Добавлены новые оптимизации, которые делают программы быстрее. Чтобы их включить, нужно добавить в настройки компилятора опцию:
-Xbinary=preCodegenInlineThreshold=40
Рекомендуется значение 40, но можно экспериментировать.
4. Kotlin/Wasm: улучшенная отладка
Теперь отлаживать приложения на Kotlin для WebAssembly стало проще. Добавлена поддержка формата DWARF, который позволяет пошагово выполнять код и смотреть значения переменных. Чтобы включить эту функцию, используйте опцию компилятора:
-Xwasm-generate-dwarf
5. Поддержка Gradle
Kotlin 2.1.20 полностью совместим с Gradle версий от 7.6.3 до 8.11. Если после обновления возникнут проблемы со сборкой, можно добавить в файл gradle.properties строку:
kotlin.kmp.isolated-projects.support=disable
6. Новые функции стандартной библиотеки
Атомарные типы: Появились общие атомарные типы в пакете kotlin.concurrent.atomics. Они экспериментальные, поэтому для их использования нужно добавить аннотацию:
@OptIn(ExperimentalAtomicApi::class)
• UUID: Теперь объекты UUID можно сравнивать и сортировать напрямую.
• Время: Интерфейс kotlinx.datetime.Clock теперь доступен как kotlin.time.Clock, а kotlinx.datetime.Instant — как kotlin.time.Instant.
7. Compose: улучшения
• Аргументы по умолчанию в открытых функциях с аннотацией @Composable теперь работают корректно.
• Удалены ComposableSingletons из публичного API, чтобы избежать утечек в inline-функциях.
• Включена функция, которая добавляет информацию о месте, где был сгенерирован Compose-код.
Фул доки и сведения об обновлении — тут.
