Команда Kotlin выпустила финальную версию Kotlin 2.3.0. Обновление приносит новые стабильные возможности языка, улучшения производительности и поддержку новейших инструментов.
📢 Основные нововведения:
✅ Язык: Больше стабильных функций, проверка неиспользуемых возвращаемых значений, явные backing field.
✅ Kotlin/JVM: Поддержка Java 25.
✅ Kotlin/Native: Улучшенный Swift export, ускорение сборки, импорт C/Objective-C библиотек (бета).
✅ Kotlin/Wasm: Полные имена и новая модель исключений включены по умолчанию.
✅ Kotlin/JS: Экспериментальный export suspend-функций, новое представление LongArray.
✅ Gradle: Совместимость с Gradle 9.0, новый API для регистрации сгенерированных исходников.
✅ Compose compiler: Стектрейсы для минифицированных Android-приложений.
✅ Стандартная библиотека: Стабильные API для работы со временем и улучшенная работа с UUID.
📖 Подробнее на сайте
Каждую ключевую фичу подробно разберу в отдельном посте в канале @kotlin_broadcast. Следите за новостями!
#Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍8❤3
Когда будете обновлять основной проект до Kotlin 2.3?
Anonymous Poll
7%
Уже затянул(а)
16%
В ближайшие дни
19%
Буду ждать 2.3.10
19%
Хотелось бы, но не дадут так просто обновиться
19%
Не планирую обновляться
4%
Другой вариант
16%
Не участвую в опросе
❤2👍2
_property! 👋 Android-разработчики, а вас тоже раздражает этот вечный boilerplate со свойствами? Приватное
_city, публичное city, постоянная путаница где что менять… Kotlin 2.3.0 приносит экспериментальную, но долгожданную фичу — Explicit Backing Fields (явные поля свойств). Теперь можно забыть про лишние переменные!
Было (старый знакомый паттерн):
// Приватное, мутабельное
private val _city = MutableStateFlow<String>("")
// Публичное, read-only
val city: StateFlow<String> get() = _city
fun updateCity(newCity: String) {
_city.value = newCity
}
Стало (новый синтаксис):
val city: StateFlow<String>
// Явно указываем поле типа MutableStateFlow
field = MutableStateFlow("")
fun updateCity(newCity: String) {
city.value = newCity // Работаем напрямую с city!
}
🔥 Что изменилось?
- Исчезла дублирующая
_city переменная- Вся логика свойства теперь в одном месте
- Внутри класса компилятор автоматически делает smart-cast к типу поля
- Снаружи свойство остаётся
StateFlow, внутри — MutableStateFlow⚠️ Важно: фича экспериментальная! Добавьте в
gradle.kts:kotlin {
compilerOptions {
freeCompilerArgs.add("-Xexplicit-backing-fields")
}
}📄 Подробности читайте в KEEP документе фичи
_? 🤔#Kotlin #AndroidDev #Kotlin23 #Android #KotlinDevelopment
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥99👍17❤6👎2
Фича экспериментальная и требует включения через флаг комплиятора
Новая фича в Kotlin 2.3 помогает отлавливать баги, когда результат функции игнорируется, а должен быть обработан. А такое часто случается при рефакторинге или когда не читаешь документацию!
Пример проблемы:
fun formatGreeting(name: String): String {
if (name.isBlank()) return "Hello, anonymous user!"
if (!name.contains(' ')) {
// Ошибка: забыли return, просто создали строку
"Hello, " + name.replaceFirstChar(Char::titlecase) + "!"
}
val (first, last) = name.split(' ')
return "Hello, $first! Or should I call you Dr. $last?"
}Такой код скомпилируется, но будет работать неправильно. С Kotlin 2.3 можно включить анализатор, который покажет предупреждение на строке с неиспользованным результатом и предотвратить баг на этапе написания кода
На текущем этапе жизни есть 2 варианта работы фичи:
kotlin {
compilerOptions {
freeCompilerArgs.add("-Xreturn-value-checker=check")
}
}// Указываем что результат API требует обработки
@MustUseReturnValues
class DataValidator {
fun validate(input: String): ValidationResult
}
kotlin {
compilerOptions {
freeCompilerArgs.add("-Xreturn-value-checker=full")
}
}Как разрешить игнорирование:
- Аннотировать функцию
@IgnorableReturnValue что не будет требовать проверки её значения:// Функция, где результат часто не нужен
@IgnorableReturnValue
fun logEvent(event: String): Boolean {
return analytics.track(event) // результат обычно игнорируем
}
// Теперь можно вызывать без предупреждения
fun main() {
logEvent("screen_opened") // ✅ Нет ворнинга
}
- Использовать переменную
_ для случаев, когда вы обрабатываете значения, но переменная вам не нужна:computeValue() // ⚠️ предупреждение
val _ = computeValue() // ✅ явно игнорируем
#Kotlin #Kotlin23
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👎6❤4👍1
Kotlin 2.3 приносит значительные улучшения производительности для Kotlin/Native. Релизные сборки (например,
linkReleaseFrameworkIosArm64) теперь компилируются быстрее — в некоторых случаях до 40%.Эти изменения особенно заметны в Kotlin Multiplatform проектах для iOS. Если вы собираете фреймворки под iOS или мак-бинарники, теперь это займёт меньше времени.
Что ускорилось:
- Задачи
linkRelease* (сборка release-версий)- Создание фреймворков для iOS
- Генерация нативных бинарников
Улучшения работают из коробки — не нужно менять код или настройки. Просто обновите Kotlin до версии 2.3.0.
Больше советов по ускорению Kotlin/Native в документации
#Kotlin #Kotlin23 #KMP #KotlinNative #iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20👍5❤2👎2
🎄 Итоги года @kotlin_broadcast
Подходит в концу 2025 год и уже совсем скоро 2026, где наш любимый Kotlin и KMP станут ещё лучше.
Вспоминаю, что такого сделали за этот год в Kotlin и выделить что-то сложно, но точно технология развивается, становится лучше и обрастает возможностями. Да, возможно каждому из нас хотелось, чтобы процесс был быстрее и экспериментальные фичи становились стабильными в более короткие сроки, но команда делает это во благо консистентности развития технологии.
Канал уходит на каникулы до начала 2026 года. Желаю вам классно провести каникулы, зарядится и продуктивно ворваться в 2026 год
💬 В комментариях делитесь чем для вас запомнился как касательно Kotlin, так и лично для каждого из вас
Подходит в концу 2025 год и уже совсем скоро 2026, где наш любимый Kotlin и KMP станут ещё лучше.
Вспоминаю, что такого сделали за этот год в Kotlin и выделить что-то сложно, но точно технология развивается, становится лучше и обрастает возможностями. Да, возможно каждому из нас хотелось, чтобы процесс был быстрее и экспериментальные фичи становились стабильными в более короткие сроки, но команда делает это во благо консистентности развития технологии.
Канал уходит на каникулы до начала 2026 года. Желаю вам классно провести каникулы, зарядится и продуктивно ворваться в 2026 год
Please open Telegram to view this post
VIEW IN TELEGRAM
2🔥18👎8❤4🎉2
Версию 2.3.10 пока пропустили, потому в нее не попадает существенных изменений, касающихся будущих версий.
Источник - KotlinLang.org
#Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥3👎2
Zac Sweers, автор и разработчик DI фреймворка Metro, который является наследником Anvil/Dagger но для KMP, описал дизайн документ по новой библиотеке. Что включает документ:
👉 Зачем Metro нужен
👉 Как работает — Основные концепции и API
👉 Поддержка KMP
👉 План работ и миграция
👉 Сравнение и ответы на вопросы — Чем Metro отличается от Dagger и Koin, разбор частых вопросов (FAQ).
Документ найдете по ссылке
#kotlin #di #архитектура
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19👍5🤔3❤2
// Создаем политику для выполнения
val policy = resilient {
// Таймаут
timeout { timeout = 2.seconds }
// Стратегия повтора выполнения
retry {
maxAttempts = 3
backoffStrategy = ExponentialBackoff(initialDelay = 100.milliseconds)
}
// Настройка политики Circuit Breaker
circuitBreaker {
failureThreshold = 5
successThreshold = 2
timeout = 30.seconds
}
}
suspend fun call(): String = policy.execute { fetchData() }
#Kotlin #Coroutines
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥42🤯8👍6❤1
Android Gradle Plugin 9.0 - самое большое изменение плагина с целью лучшей работы вместе с Gradle. Подробнее изменения я уже описывал в отдельном посте, но хочу сделать фокус на том, как много придется менять в KMP проектах при миграции на AGP 9.0:
com.android.kotlin.multiplatform.library - плагин для добавления поддержки Android таргета в KMP модули. Возможность была еще до AGP 9.0. Он имеет меньше возможностей чем Android Library плагин, но именно те что нужны для KMP. Результат - проще конфигурация и быстрее скорость сборки. Подробнее рассказывал тут🔗 Вопрос миграции также осветили в статье в блоге JetBrains
🔗 Документация по AGP 9.0 и рекомендации по миграции
#KMP #Gradle #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24👎6🔥3🤯1
Проект вырос с Telegram‑бота до 130k MAU и переезжает в отдельное приложение на Kotlin Multiplatform (старт с Android, далее iOS).
Задачи:
Условия:
👉 Контакт для связи: @aprll
#вакансия
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤1
KToon - это KMP библиотека для сериализации данных в TOON формате
Пример одинаковых данных в разных нотациях:
Подробнее про TOON формат можно почитать из официального источника
#KMP
TOON (Token-Oriented Object Notation) - это более компактный формат по сравнению с JSON, который хорошо подходит для мобильных приложений, IoT, AI (для использоваия меньшего кол-ва токенов) и везде где надо сократить объем передаваемой информации и/или повысить скорость передачи данных.
Пример одинаковых данных в разных нотациях:
[
{"id": 1, "name": "Alice", "email": "alice@example.com", "age": 30},
{"id": 2, "name": "Bob", "email": "bob@example.com", "age": 25},
{"id": 3, "name": "Charlie", "email": "charlie@example.com", "age": 35}
]
users[3]{id,name,email,age}:
1,Alice,alice@example.com,30
2,Bob,bob@example.com,25
3,Charlie,charlie@example.com,35Подробнее про TOON формат можно почитать из официального источника
#KMP
👍41👎3🔥2
AGP 9.0 большой стресс для KMP проекта, особенно если использовали фичи Android билд системы по полной. Придется менять Gradle скрипты, добавлять новые модули и организовать их связи. Из плюсов - лучшее кэширование проектов и скорость сборки.
Чем вам придется заниматься
👉 Заменой library плагинов
👉 Поиск альтернативы buildVariant
👉 Поиск замены Build Config
👉 Вынос NDK/RS кода из KMP модулей в нативные Android модули
👉 Отделение Android App модуля от KMP
👉 Прочие правки в скриптах
Самое интересное что на англоязычный вариант этой статьи дал комментарий инженер AGP. Самое важное - это неприятные, но необходимые изменения для эволюции систеы сборки. Причем текущий шаг - первый этап из двух. Работа над переменами стартанула в 2019 году.
#KMP #Gradle
Please open Telegram to view this post
VIEW IN TELEGRAM
❤18🥰4👎3👍1
Главное:
👉 Стабилизированы JSON-фичи (больше не experimental): allowComments, allowTrailingComma, prettyPrintIndent, decodeEnumsCaseInsensitive, @EncodeDefault, JsonUnquotedLiteral.
👉 Поддержка Unused Return Value Checker из Kotlin 2.3 — теперь можно ловить кейсы, где вы забыли использовать результат encodeToString() и подобных API.
👉 Улучшения полиморфизма: утилита subclassesOfSealed для автоматической регистрации sealed-подклассов в SerializersModule.
⚒️ Багфиксы: CBOR, ProtoBuf для unsigned типов, мелкие несовместимости.
#Kotlin #KotlinX
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍11
Вышла новая версия Ktor с фокусом на стабильность и долгожданные фичи!
Что нового:
👉 Автоматическая генерация OpenAPI документации из кода — теперь ваш Swagger UI строится динамически на основе роутинга, а не статических файлов. Новый API
describe позволяет описывать эндпоинты прямо в коде.👉 Дуплексный стриминг для OkHttp — отправляйте и получайте данные одновременно через HTTP/2. Включается через
duplexStreamingEnabled в конфигурации движка.👉 Поддержка Zstd компрессии — быстрый алгоритм с высокой степенью сжатия теперь доступен через модуль
ktor-server-compression-zstd.👉 HttpRequestLifecycle плагин — автоматическая отмена HTTP запросов при отключении клиента. Structured concurrency сам почистит все ресурсы. Работает с Netty и CIO движками.
👉 Множество исправлений и улучшений производительности, чтобы Ktor был готов к новому году разработки.
🔗 Подробности в анонсе
#Ktor #Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31👍8
Вышла первая мажорная версия Exposed — библиотеки для работы с базами данных в Kotlin от JetBrains!
Exposed — это легковесная ORM библиотека, которая предоставляет два подхода к работе с БД: type-safe SQL DSL и DAO API. Написана на Kotlin с поддержкой корутин и всех фишек языка.
Библиотека будет полезна Backend разработчикам на Kotlin, которые хотят type-safe работу с БД без магии рефлексии. Тем, кто ценит контроль над SQL запросами, но не хочет писать сырой SQL. Проектам на Ktor и Spring, где нужна легковесная ORM с поддержкой корутин.
// Пример SQL запроса на Kotlin + Exposed
fun buildQuery(): Query {
val query = TaxiRide.selectAll()
query.addRideFilters("completed", "John Doe")
return query
}
fun Query.addRideFilters(status: String?, passengerName: String?) {
status?.let {
this.andWhere { TaxiRide.status eq status }
}
passengerName?.let {
this.adjustColumnSet { // add a JOIN to Passenger
innerJoin(Passenger, { Passenger.id }, { TaxiRide.passengerId })
}.andWhere { Passenger.name eq passengerName }
}
}
🔗 Подробности в анонсе
🔗 Официальный сайт Exposed
#Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
❤33👍16🤯8🤔5
🤔 Как дать AI актуальную информацию про Open Source библиотеки
Используя любой кодинг агент, точно столкнёшься с тем, что он не может использовать свежие API. Он начнет импровизировать, придумывая API из головы или писать поверх либы фичу, которая уже в ней есть. Спросили про новую функцию в Ktor 3.4? "Извините, я обучен на данных до января 2025".
Я подключаю MCP и скиллы для лучшей интеграций новых знаний:
⭐️ DeepWiki — быстро разобраться в архитектуре проекта. Есть MCP
⭐️ Context7 — актуальная документация JS/TS/Python через MCP. Платный, но с бесплатным лимитом на 500 запросов в месяц
🏝 ksrc — исходники Kotlin зависимостей @nek_12
💬 В комментариях делитесь как вы решаете подобную задачу
#kotlin #ai #tools #mcp
Используя любой кодинг агент, точно столкнёшься с тем, что он не может использовать свежие API. Он начнет импровизировать, придумывая API из головы или писать поверх либы фичу, которая уже в ней есть. Спросили про новую функцию в Ktor 3.4? "Извините, я обучен на данных до января 2025".
Я подключаю MCP и скиллы для лучшей интеграций новых знаний:
#kotlin #ai #tools #mcp
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17👍4👎2🔥1
#Android #KMP
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥7👏6🤔1
Готовится к релизу Koin 4.2 где уже в RC версии появился Gradle плагин, которые будет использоваться для включения Compile Time Safety в будущем. Плагин способен работать с Koin Annotations и традиционным DSL подходом.
Что нужно сделать
io.insert-koin.compiler.pluginСложность может быть одна - нужен Gradle 8.X и Kotlin 2.3.20, а по результатам опроса не всего на него перешли
🔗 Источник - официальный блог Koin на Medium
#Kotlin #Koin #KMP
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥34👍7👎2🤔2
Что важного в исправлениях
👉 Исправлены баги в рефлексии
🛠 Исправление проблемы с null типами
Кажется пора переехать на новую версию и посмотреть, подойдет ли она вам
#Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24👍5❤1👏1