Плагин проверяет граф на трёх уровнях:
👉 смотрит каждый модуль в изоляции
👉 собирает полный граф при
startKoin<T>()👉 проверяет каждый call-site, включая
get<T>(), inject<T>(), koinViewModel<T>() и вызовы внутри @Composable. Если проект собрался, граф валиден.Работает с DSL и аннотациями, поддерживает KMP. Миграция с koin-ksp-compiler не ломает существующие аннотации. Требует Kotlin 2.3.20+ и Koin 4.2.1+.
‼️ ВАЖНО: классический DSL-стиль
single { MyClass(get()) } не даёт полной проверки. Полная compile safety работает с single<MyClass>() или аннотациями (@Single, @Factory, @KoinViewModel).По умолчанию strictSafety включён на модуле, где живёт startKoin: compileKotlin на нём перезапускает проход на каждой сборке. Библиотечные модули остаются инкрементальными. Непонятно как устроена работа со скоупами.
Koin использую давно, и тест с checkModules() всегда был немного в стороне от основного пайплайна. Теперь это просто часть компиляции. Смущает только порог Kotlin 2.3.20: если проект ещё не обновился, придётся ждать.
🔗 Источник - оф блог Kotin
#android #kotlin #koin #di
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍23👎5
Уже попробовали новый синтаксис создания коллекций?
Final Results
4%
Да
52%
Нет
34%
Нафиг нужно
10%
Не участвую
👍13👎3
// Не работало в Koltin 2.3.X
// В Koltin 2.4.0 теперь можно
const val TAG = "MyClass".lowercase()
В Kotlin 2.4.0 экспериментально добавили поддержку строковых функций stdlib в compile-time константах:
.lowercase(), .uppercase(), .trim(). Плюс операции с unsigned-типами и вычисление .name у enum-констант и KCallable.Чтобы было понятно, какие функции обрабатываются компилятором, ввели аннотацию
@IntrinsicConstEvaluation. Пока аннотацию расставили не везде. В следующих релизах добавят остальное.Включается флагом компилятора:
kotlin {
compilerOptions {
freeCompilerArgs.add("-Xintrinsic-const-evaluation")
}
}#Kotlin #Kotlin240
Please open Telegram to view this post
VIEW IN TELEGRAM
👍44👎4
Touchlab выкатил большой разбор с прямым сравнением двух путей экспорта KMP в iOS: новый Swift Export от JetBrains против связки Obj-C bridge + SKIE. Сравнивают не галочками фич, а скомпилированным выводом обоих подходов. Это сильная сторона текста, можно повторить и посмотреть сгенерированный код самому.
Swift Export в Kotlin 2.4 дошёл до alpha и подтянул concurrency. Идея простая - генерировать нативный Swift API напрямую, без прослойки Objective-C. Swift Export и Obj-C export взаимоисключающие, поэтому выбор бинарный, смиксовать нельзя.
Где Swift Export уже выигрывает:
👉 Nullable-примитивы маппятся напрямую в
Int32?, без обёрток типа KotlinInt👉 Сохраняет
typealias и структуру пакетов👉 Настоящие изолированные Swift-модули вместо одного umbrella-фреймворка
SharedГде пока проигрывает, и это важно для прода:
👉 Generics по сути не поддерживаются. Только Kotlin-типы как параметры, value-типы Swift отваливаются, бывает что просто не компилится
👉 Sealed-классы теряют исчерпываемость. Никакого
onEnum, обязательный default, компилятор не поймает новый кейс👉 Extension-функции деградируют в static-функции с явным receiver. Совсем не по-свифтовому
👉 Всё помечается
final, кросс-языкового наследования нетВывод авторов - для нативного iOS UI сегодня по-прежнему SKIE, а Swift Export годится для пет-проектов и небольших MVP.
Cтатью писал Touchlab, авторы SKIE и драйверы KMP в сообществе. По фактам они правы, Swift Export пока alpha и дыры реальные. Но «SKIE definitive choice» это уже их акцент, читайте с этой поправкой. Направление от JetBrains очевидное - KMP-проекты без Objective-C под капотом. Вопрос только в сроках, слишком уж долго они топили за поддержку Obj-C интеропа и игнорировали Swift.
#Kotlin #KMP #Swift #IOS
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23👎5
This media is not supported in your browser
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍81👎1
Forwarded from Android Broadcast
С 16 июня появятся предупреждения про превышение бесплатных лимитов на месяц, с 11 августа 2026 начнётся реальное ограничение бесплатных публикаций.
Пороги у 90 перцентиля: 1 167 файлов в месяц, 78 МБ суммарно, 7 релизов. Большинство open source разработчиков не заметят. Кто публикует много и часто — проверьте Usage Center уже сейчас.
Лично мне интересно, как это ляжет на KMP-проекты. Один multi-target релиз — это десятки файлов на каждую платформу: sources, javadoc, pom, подписи. Sonatype говорит, что работает с JetBrains над смягчением. Посмотрим.
🔗 Официальная документация о лимитах
#Maven
Please open Telegram to view this post
VIEW IN TELEGRAM
👎24
Zac Sweers (автор Metro, Anvil, Okio) выкатил небольшую CLI-утилиту для форматирования. Идея простая: Spotless крутится через Gradle.
kempt — одна точка входа без оверхеда системы сборки.Поддерживает Kotlin через
ktfmt, Java через google-java-format, Rust через cargo fmt, license headers, trailing whitespace. Конфиг в .kempt.toml.$ brew install ZacSweers/tap/kempt-fmt
$ kempt init
$ kempt install-hook
$ kempt format|check
Это проект-хобби, не боевой инструмент. Автор сам предупреждает. Но концепция правильная — форматирование должно жить вне системы сборки.
#Tooling #Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
👎13👍7
Первая бета новой ветки 2.4.x. Из заметного:
klib-инкрементальная компиляция включена по дефолту. Фича появилась в 1.9.20, теперь без флага. При изменении части klib пересобирается только она. Debug-сборки в KMP-проектах должны стать заметно быстрее. Чистые сборки могут чуть замедлиться — если что, kotlin.incremental.native=false в gradle.properties.StackTraceRecoverable в stdlib. Новый интерфейс для кастомных исключений с нестандартными конструкторами: переопределяешь copyForStackTraceRecovery() — и kotlinx.coroutines корректно копирует такое исключение при восстановлении стека трейса. Актуально, если твои исключения принимают дополнительные аргументы и трейс через корутины раньше обрезался. @OptIn(ExperimentalStdlibCoroutineSupportApi::class), только JVM.Kotlin/Wasm: companion-объекты теперь инициализируются как на JVM,
require() внутри @JsFun — ошибка компилятора, нужна миграция на @JsModule или import().klib-инкрементальная по дефолту и Playwright вместо Karma — два изменения, которых я ждал. Если бета пройдёт без сюрпризов, дейли цикл в KMP-проектах ощутимо ускорится 🎯
🔗 kotlinlang.org
#Kotlin #KMP
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14👎1
Attribution screen — не рекомендация, а требование лицензий. Apache 2.0 (Jetpack, Retrofit, OkHttp и др.) требует воспроизводить attribution notices в дистрибутиве, MIT — сохранять copyright notice. По факту любое приложение на стандартном стеке обязано это делать, но большинство либо тянет, либо собирает список вручную.
Библиотека AboutLibraries закрывает это на уровне Gradle: плагин собирает метаданные всех зависимостей при сборке. Работает на всех KMP таргетах: Android, iOS, Desktop, Wasm, JS. Подключаешь CMP модуль, добавляешь
LibrariesContainer — готовый экран атрибуции.На днях вышла версия 15.0.0 с поддержкой Compose 1.11.x, обновлённый UI, AGP 9, Kotlin 2.4.
Есть strict mode: задаёшь список разрешённых типов лицензий, если в зависимостях появляется что-то нежелательное, сборка падает. Для проектов, где compliance важен, это меняет весь процесс.
‼️ ВАЖНО (Android): AGP 9.0 включает оптимизированный resource shrinking по умолчанию и может удалить
aboutlibraries.json из ресурсов. Нужно добавить res keep-файл — подробности в README.#Kotlin #KMP #ComposeMultiplatform #Anrooid #Desktop #JS #IOS #WASM #JVM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26👎5
Ghost Serializer — byte-first JSON-сериализатор для KMP с интеграцией в Ktor. Автор заявляет +66% throughput и -50% heap по данным HTTP Arena. Верифицировать цифры сложно: бенчмарки self-submitted, библиотека совсем новая. Но механика под капотом заслуживает внимания.
KSP2 при компиляции ищет collision-free параметры для перфект-хеша полей каждого класса. В рантайме парсер берёт первые 4 байта JSON-ключа, упаковывает в 32-bit int и резолвит индекс поля одной арифметикой: ноль строковых сравнений, ноль аллокаций на lookup:
val hash = ((key * multiplier + size) shr shift) and 1023
Required-поля трекаются через один
Long-bitmask — проверить, что все обязательные поля пришли, это одна битовая операция на регистре. Hot path работает прямо с ByteArray / ByteReadChannel, минуя декодирование в строки.Подключается как дополнительный
ContentNegotiation в Ktor, фоллбечится на kotlinx.serialization. Внедрять можно точечно, только на нагруженных эндпоинтах:install(ContentNegotiation) {
ghost()
json(Json { ignoreUnknownKeys = true })
}Для прода пока рано: библиотека только появилась, отзывов нету. Но техника интересная — это ровно то, что делают высокопроизводительные парсеры, только через KSP2 в компайл-тайм.
🔗 Статья от автора
#Kotlin #KMP #KSP
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25👎2
Вышел RC, фич нет, только баги из 2.4.0. Если придерживаешь апдейт из-за конкретной проблемы, есть смысл свериться со списком, прежде чем переходить на стабильную 2.4.10.
Главное:
- В Compose-компиляторе почистили проверку стабильности типов до и после каста в skip-логике. Ранее могла использоваться стабильность исходного типа вместо приведённого, отсюда лишние рекомпозиции.
- На Native iosSimulatorArm64 падал
IrTypeAliasSymbolImpl is already bound при работе с kotlinx.datetime.Instant — частая боль на симуляторе при тестах KMP.- В
.main.kts-скриптах @file:CompilerOptions("-jvm-target", ...) с 2.4.0 тихо игнорировался, скрипт компилировался под JVM 1.8RC обычно докатывается до стабильной версии без сюрпризов, но если у тебя завязано на симулятор или
.main.kts-скрипты, лучше проверить сейчас, а не после апдейта.#Kotlin #KMP
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9👎1
Раньше о том, насколько агент реально справляется с Kotlin, приходилось судить по внутренним ощущениям. Теперь есть общий ориентир - JetBrains выкатили Kotlin Benchmark: 100+ инженерных задач из реальных open-source репозиториев, методология на базе SWE-bench. Агент читает issue, разбирается в контексте проекта и генерирует патч, который проверяется тестами в контейнере.
Первые результаты на лидерборде:
🏆 Claude Code с Opus 4.7 xhigh — 90 из 105 (85,71%)
🥈 JetBrains Junie с Opus 4.7 max — 81,9%
🥉 Codex с GPT-5.5 xhigh — 81,9%
‼️ ВАЖНО: цифры публикует сам JetBrains, это не независимый бенчмарк, хотя датасет и харнесс открыты на GitHub, и методику можно проверить самому. Это первая итерация: без свежих моделей, без Android и KMP специфики (обещают добавить в следующей), и меряют пока только «тест прошёл или нет», без стоимости, скорости и качества кода.
Ценность для сообщества явно будет в том, что теперь есть хоть какой-то публичный и проверяемый ориентир для Kotlin. Также мне понравилось, что в дашборде указывается связка «Агент + Модель + Effort». Жду, когда там появятся китайские модели с открытыми весами.
#Kotlin #AI
Please open Telegram to view this post
VIEW IN TELEGRAM
👍28👎9
С 13 по 19 июля включительно распродажа продукции для рабочего пространства! Скидки до -25% в Ergostol.
В акции участвуют популярные модели столов, рам, кресел и других аксессуаров. Это отличная возможность приобрести их выгодно!
ANDROID10 на сайте Ergostol на все столы, опции к ним и кресла. Так же промокод действует и на Ozon Реклама. ООО «СОФТЭФФЕКТ». ИНН 7735575262
Please open Telegram to view this post
VIEW IN TELEGRAM
👎6👍1
В
Kotlin 2.4.20-Beta1 включали инкрементальную компиляцию Native: теперь пересобираются только затронутые части klib. На debug-сборках KMP это должно заметно резать время, а это ровно та боль, из-за которой iOS-таргет не хочется перезапускать лишний раз.Есть честная оговорка от самих JetBrains ⚠️: за инкрементальность можно высоко заплатить временем ожидания на clean-сборках. Лучше отключайте флагом на CI/CD :
kotlin.incremental.native=false
Попробуйте померять результат на своём проекте и делитесь в комментариях
#Kotlin #KMP #KotlinNative
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14👎5
Из того, что реально касается продакшн-кода - исправлена регрессия в Compose Compiler: классы, которые раньше считались
stable, в 2.4.0 иногда определялись как runtime/Uncertain. Если недавно обновились на 2.4.0 и столкнулись со странными лишними рекомпозициями — обновляйтесь на новую версию.
#Kotlin #Compose
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19👎3
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13👎10
🔥 БИТВА ТЯЖЕЛОВЕСОВ: шесть платформ на одном ринге.
🗓 Когда: 5 августа, 20:00 по МСК.
📍 Где: Открытый вебинар курса «Проектирование и разработка Kotlin-бэкенда».
Участники:
🍃 Spring Boot 4 | ⚡️ Quarkus | ⚡️ Micronaut | 🧩 Kotlin Multiplatform | 🐹 Go | 🦀 Rust
💡 Правила игры:
Запускаем одинаковую нагрузку и сравниваем без поблажек:
Скорость запуска — замеряем время до первого ответа.
Расход памяти — смотрим на занимаемую область и машинный код.
Пропускная способность — кто сдастся при пиковой нагрузке.
Выводы: Где сборка в машинный код спасает средства, а где это «выстрел из пушки по воробьям».
👉 Регистрация на вебинар для разработчиков и архитекторов
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🗓 Когда: 5 августа, 20:00 по МСК.
Участники:
🍃 Spring Boot 4 | ⚡️ Quarkus | ⚡️ Micronaut | 🧩 Kotlin Multiplatform | 🐹 Go | 🦀 Rust
Запускаем одинаковую нагрузку и сравниваем без поблажек:
Скорость запуска — замеряем время до первого ответа.
Расход памяти — смотрим на занимаемую область и машинный код.
Пропускная способность — кто сдастся при пиковой нагрузке.
Выводы: Где сборка в машинный код спасает средства, а где это «выстрел из пушки по воробьям».
👉 Регистрация на вебинар для разработчиков и архитекторов
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
👎2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4👎2