👩💻 Kotlin 2.4.0 — 4 июня 2026 г. в 06:30:03.970
👩💻 Kotlin 2.4.0 https://blog.jetbrains.com/kotlin/2026/06/kotlin-2-4-0-released/ Вышел Kotlin 2.4.0 - крупный релиз с стабилизацией Context Parameters, Explicit Backing Fields, поддержкой Swift packages в Kotlin/Native, WebAssembly Component Model и совместимостью с Java 26 и Gradle 9.5.0. ➡️ Stable Context Parameters Context Parameters - долгожданная фича, которая позволяет функциям неявно получать зависимости из контекста вызова. В 2.4.0 она наконец стабильна - никаких @OptIn(ExperimentalContextReceivers::class). Это меняет подход к DI в pure Kotlin-коде: вместо передачи зависимостей через параметры или Singleton-objects, контекст устанавливается на уровне вызывающего кода. // Объявление функции с context parameters context(Logger, Database) fun processUser(id: UserId): User { log("Processing user $id") // Logger из контекста return query("SELECT * FROM users WHERE id = $id") // Database из контекста } // Использование — контекст передаётся явно через with() with(logger, database) { val user = processUser(UserId("42")) } ➡️ Stable Explicit Backing Fields Explicit Backing Fields позволяют объявить тип backing field явно - отдельно от типа свойства. Особенно полезно для паттерна MutableStateFlow as private backing / public StateFlow. // До 2.4.0 — стандартный "boilerplate" паттерн class ViewModel { private val _uiState = MutableStateFlow(UiState()) val uiState: StateFlow<UiState> = _uiState.asStateFlow() } // С Explicit Backing Fields в 2.4.0 class ViewModel { val uiState: StateFlow<UiState> field = MutableStateFlow(UiState()) } ➡️ Kotlin/Native: Swift packages как зависимости Теперь Kotlin/Native-модули могут напрямую подключать Swift packages (SPM) как зависимости. Это убирает необходимость в прослойках на Objective-C и упрощает интеграцию Swift-библиотек в KMP-проекты. // build.gradle.kts kotlin { iosTarget { compilations.main.cinterops { val swiftLib by creating { swiftPackage("https://github.com/example/lib", from = "1.0.0") } } } } ➡️ Kotlin/Native: CMS GC включён по умолчанию Concurrent Mark-and-Sweep (CMS) Garbage Collector теперь работает по умолчанию на всех Native-таргетах. Он обеспечивает сборку мусора параллельно с выполнением приложения, снижая паузы и улучшая latency. Предыдущий GC был stop-the-world. ➡️ Kotlin/Wasm: инкрементальная компиляция по умолчанию + WebAssembly Component Model Инкрементальная компиляция для Wasm-таргетов включена по умолчанию - пересборка только изменённых модулей, что заметно ускоряет dev-цикл. Добавлена поддержка WebAssembly Component Model - стандарта для создания портабельных компонентов с описанием интерфейсов через WIT (WebAssembly Interface Types). Это открывает путь к интероперабельности Kotlin/Wasm с другими языками в Wasm-экосистеме. ➡️ Kotlin/JVM: поддержка Java 26 Kotlin 2.4.0 полностью поддерживает Java 26, включая новые API и языковые возможности. Также аннотации в metadata теперь включены по умолчанию - это улучшает инструментальную поддержку (kapt, KSP, IDE). ➡️ Stable UUID API в Standard Library API для работы с UUID стабилизировано: val id = Uuid.random() // генерация val parsed = Uuid.parse("550e8400-e29b-41d4-a716-446655440000") println(id.toString()) // "550e8400-..." Также добавлена поддержка проверки отсортированного порядка коллекций через isSorted() / isSortedDescending(). ➡️ Gradle 9.5.0 и Maven Kotlin 2.4.0 совместим с Gradle 9.5.0. В Maven-плагине добавлено автоматическое выравнивание версий Java и JVM target - меньше ручной конфигурации. ⚠️ Breaking Changes • Kotlin/Native: убраны iosX64 и macosX64 таргеты. Используйте arm64. Обсуждаем тут -> https://t.me/famous_md_bot (Tier 3) —————— 💭 Очень здравый релиз с изменениями, которые действительно принесут пользу и ими будут пользоваться - один Explicit Backing Fields чего стоят) + приятности для KMP

