Kotlin Multiplatform Broadcast
9.48K subscribers
833 photos
53 videos
1.12K links
Новости и фичи Kotlin, а также Kotlin Multiplatform

YouTubе канал: https://youtube.com/androidBroadcast
Compose Multiplatform @compose_broadcast
iOS разработка @ios_broadcast
Новости Android @android_broadcast
Реклама и прочее @android_broadcast_bot
Download Telegram
Kotlin Contracts - это фича Kotlin, которая даёт компилятору дополнительную информацию про методы, что позволяет лучше понимать работу кода.

private fun sample(value: Value?): Boolean {
contract {
returns(true) implies (request != null)
}
...
}

а вот так будет выглядеть вторая версия контрактов
fun checkAndRun(x: Any, block: (x: String) -> Unit): Boolean contract [
callsInPlace(block, AT_MOST_ONCE),
returns(true) implies (x is String)
] {
if (x is String) {
block()
return true
} else {
return false
}
}


Про вторую версию контрактов можно почитать в статье (9м)

#kotlin
👍36🔥1
Вы знаете, что klib после компиляции Kotlin Native не содержит скомпилированный код, а только IR, который потребует компиляции каждый раз при сборке проекта? 🤯

Если
вы хотите больше погрузиться в том как работает компиляция Kotlin Native, то советую изучить статью(EN,10м)

🔗 Альтернативная ссылка

#kotlin #native
👍16🤔21
🏝 Вышел Kotlin 2.2.20 Beta1 (в обход 2.2.10)

Kotlin/JVM
👉 when expressions теперь будет компилироваться в более оптимизированный байтвод с использованием invokedynamic
invokedynamic — это байткод-инструкция JVM, позволяющая при первом запуске динамически связать вызов через bootstrap-метод, а затем выполнять его так же быстро, как обычный виртуальный метод, что даёт лямбдам и динамическим языкам нативную производительность.



Улучшения для Kotlin/Native
👉 Добавлена поддержка stack canaries в итоговый Koltin/Native бинарник, что повышает безопасность (нужно включение через флаг)
👉 Уменьшение размера бинаря для iOS таргета (нужно включение через флаг). Под капотом используется оптимизация -Oz для LLVM компилятора
👉 Улучшение информации об объектов в Kotlin/Native для дебагеров LLDB v GDB


Kotlin/WASM
👉 Отделили npm зависимости: ранее все npm зависимости устанавливались вместе в папку проекта. Теперь установка будет общей для всех всех проектов в папке в USER HOME

#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19👍112
Вышел KtLint 1.7.0 с поддержкой Kotlin 2.2.0

Что нового в свежей версии инструмента для анализа качества Kotlin кода
👉 Добавили поддержку Kotlin Context Parameters
👉 Отключили по умолчанию правило no-unused-import
🛠 Обновление зависимостей, небольшие улучшения., исправление багов

#kotlin
🔥17
🏝 Вышел релиз Koog 0.3.0 - библиотеки для написания AI агентов на Kotlin

Что нового:
👉 Сохранение состояния агента на диске
👉 Поддержка векторного хранилища для документов
👉 Поддержка Native OpenTelemetry
👉 Интеграция Spring Boot
👉 Параллельное выполнение задач
👉 Модерация и observability из коробки
👉 Множество других фичей

#kotlin #ai
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24👍5🤔1
🏝 Вышла RC версия Kotlin 2.2.10 с исправлением багов и улучшениями производительность версии 2.2.0

#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥4
🚀 Вышел Ktor 3.2.2, который исправил работу на Android и другие минорные баги

#ktor #kotlin #android
Please open Telegram to view this post
VIEW IN TELEGRAM
👍202
🏝 JetBrains снова принимает заявки на гранты для поддержки open source проектов для Kotlin

Подать заявку можно тут до 31 июля

Проекты получат гранты, если:
👉 Решают важную проблему в экосистеме Kotlin, особенно в KMP
👉 Быстро реагируют на баги, уязвимости и обновления Kotlin/библиотек
👉 Следуют лучшим практикам разработки библиотек
👉 Имеют понятный roadmap развития

#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍4
Автор Kombinator рассказал о том как он делал архитектуру и реализацию библиотеки. Если кому интересно узнать про реализацию кодогенерации на KSP - читайте в статье(EN,6м).

🔗 Альтернативная ссылка

#kotlin
👍9
🏝 Kombinator - open source библиотека для генерации экземпляров Kotlin объектов со всеми возможными комбинациями значений из заданных.

Библиотека работает на основе генерации кода через KSP. Может быть полезна для тестов, чтобы проверять разные входные данные.

// Уровень класса @Kombine: Задает значения по умолчанию для свойств
// без аннотаций и без дефолтных значений property
@Kombine(
allPossibleIntParams = [100],
allPossibleStringParams = ["system"],
)
data class ScreenConfig(
// Аннотация на уровне свойства переопределяет уровень класса для 'theme'
@Kombine(allPossibleStringParams = ["light", "dark", "auto"])
val theme: String,

// Есть значение по умолчанию, Kombinator будет использовать ТОЛЬКО "portrait"
val orientation: String = "portrait",

// Нет аннотации @Kombine и значения по умолчанию.
// Будет использовать значение уровня класса: [100]
val padding: Int,

// Аннотация на уровне свойства переопределяет уровень класса для 'fontSize'
@Kombine(allPossibleIntParams = [12, 16, 20])
val fontSize: Int,

// Нет аннотации @Kombine и значения по умолчанию.
// Будет использовать значение уровня класса: ["system"]
val fontFamily: String,
)

#kotlin #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30🏆2
🏝 Вышел Coil 3.3.0 - загрузчик картинок с поддержкой KMP

Что нового:
👉 Добавили новые API для задания ограничения потребления памяти, когда приложение в фоне
👉 SvgDecoder может работать со сторонними парсерами SVG
👉 Много минорных улучшений API
👉 Обновлени зависимостей

#kotlin #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👍8
🏝 kotlinx.fuzz - библиотека для Fuzz тестирования Kotlin кода

Fuzz testing - это подход для автоматичекской генерации тестов со случайными или невалидными входными данными, чтобы проверить неожиданные ошибки и сценарии. Теперь есть официальное решение от JetBrains kotlinx.fuzz

@KFuzzTest
fun testDuration(f: KFuzzer) {
val isoString = f.asciiString(10)
val duration = Duration.parseIsoStringOrNull(isoString)
println("$isoString -> $duration")
}


#kotlin #тестирование
Please open Telegram to view this post
VIEW IN TELEGRAM
24👍10
Media is too big
VIEW IN TELEGRAM
📹 Coroutine Debugging in IntelliJ IDEA | Alexey Merkulov (EN,15м)

Подробный рассказ как в IDEA улучшали интеграцию между IDE и библиотекой Kotlin Coroutines для реализации дебага корутин как синхронного кода

#kotlin #coroutines #idea #kotlinconf25
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔94👍3
🏝 Использование inline, crossinline и reified в Kotlin может иметь ряд сложностей: сломанные стектрейсы, встраивание кода может повлиять негативно на код и другие. Подробнее читайте в статье

🔗 Альтернативная ссылка

#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🤯91🙏1
🏝 Вышла вторая Beta Kotlin 2.2.20

В свежей версии исправили баги и сделали улучшения в работе

#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20
🏝🦢 Kotlin-to-Swift экспорт теперь работает по умолчанию [EXPERIMENTAL]

Kotlin-to-Swift экспорт позволяет удобно использовать скомпилированный для Apple таргетов код из Swift удобным образом. Изменение добавили в Kotlin 2.2.20-Beta2

Ключевые фичи:
👉 Поддержка многомодульности: каждый Kotlin модуль - отдельный Swift модуль
👉 Поддержка пакетов в коде
👉 type alias теперь доступны из Swift
👉 Улучшения в nullability с примитивными типами
👉 Вызов перегруженных функций в Kotlin из Swift кода
👉 Можно изменить имя модуля

Фича всё ещё в экспериментальном режиме и для её включения надо выполнить ряд действий (подобно как раньше в XCode проект подключался KMP модуль)

#kotlin #swift #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27🔥10🤔1
🏝 В Kotlin 2.2.20 упростили объявление common зависимостей KMP проекта

Теперь общие зависимости (common) можно объявить в dependencies блоке в kotlin {}
kotlin {
@OptIn(ExperimentalKotlinGradlePluginApi::class)
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2")
}
}

#kotlin #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
14🔥6🎉2👍1
В Kotlin Multiplatform проекте теперь можно шарить код между JS и wasmJs таргетами через общий source set - WEB.

Изменение доступно в Kotlin 2.2.20-Beta2

#kotlin #kmp
🔥116👍1
🏝 Kotlin 2.2.20-Beta2: кроссплатформенная компиляция без Mac* 🤯 [STABLE]

В новой бете Kotlin 2.2.20 стабилизирована кроссплатформенная компиляция .klib-артефактов. Теперь публиковать Kotlin-библиотеки можно с любой хост-машины, что значительно упрощает процесс, особенно для Apple-таргетов.

Mac всё ещё потребуется, если проект использует cinterop, CocoaPods или нужно собрать финальные бинарники для Apple. Подробности — в документации.

Если в gradle.properties добавляли kotlin.native.enableKlibsCrossCompilation=true, то теперь можно убрать

#kotlin #kmp #klib #native
Please open Telegram to view this post
VIEW IN TELEGRAM
🏆19👍52🤔1
🏝 В Kotlin 2.3.0 запретят использовать return без явного объявления возвращаемого типа в функции

В Kotlin 2.2.20-Beta2 можно попробовать новое поведение при использовании return - обязательное объявление возвращаемого типа функции. Новое поведение будет по умолчанию работать в Kotlin 2.3.0
//  Возвращаемый типы функции указан. Можно использовать return
fun getDisplayNameOrDefault(userId: String?): String =
getDisplayName(userId ?: return "default")

// Не компилируется. Используется return без явного указания возвращаемого типа функции
fun getDisplayNameOrDefault(userId: String?) =
getDisplayName(userId ?: return "default")


Готовимся к миграции после обновления языка. Всё во славу большей стабильности нашего кода

#kotlin #kotlin_2_3
Please open Telegram to view this post
VIEW IN TELEGRAM
👍63🤔26🤯7🏆4