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

YouTubе канал: https://youtube.com/androidBroadcast
Compose Multiplatform @compose_broadcast
iOS разработка @ios_broadcast
Новости Android @android_broadcast
Реклама и прочее @android_broadcast_bot
Download Telegram
🚀 Вышел Ktor 3.2.0 (есть баг в Android, не спешите обновляться)

Что нового в свежей версии:
👉 типизированная конфигурация
@Serializable
data class DatabaseConfig(
val jdbcUrl: String,
val username: String,
val password: String,
)
fun Application.module() {
property<DatabaseConfig>("database")
}


👉 Cобственный DI
fun Application.database(@Property("database") config: DatabaseConfig) {
dependencies {
provide("optional-name") { HikariDataSource(...) }
provide {
Database.connect(resolve<HikariDataSource>("optional-name"))
} cleanup { database: Database ->
TransactionManager.closeAndUnregister(database)
}
}
}

// suspend DI
suspend fun Application.module() {
val database: Database = dependencies.resolve()
...
}


👉 CIO клиент с поддержкой домен сокетов
val server = embeddedServer(CIO, configure = {
unixConnector("/tmp/test-unix-socket-client.sock")
}) {
routing {
get("/") {
call.respondText("Hello, Unix socket world!")
}
}
}


👉 Более тесная интеграция с HTMX (библиотека JavaScript, которая позволяет создавать динамические веб-интерфейсы без написания JavaScript-кода)
fun Application.routing() {
hx.get("/status") { /* Return HTML content */ }
get("/status") {
call.respondHtml {
head { script { src = "https://unpkg.com/[email protected]" } }
body {
div {
attributes.hx {
get = "/status"
trigger = "load"
}
}
}
}
}
}


👉 Ktor Version Catalog
// settings.gradle.kts
dependencyResolutionManagement {
versionCatalogs {
create("ktorLibs") {
from("io.ktor:ktor-version-catalog:3.2.0")
}
}
}


‼️ Есть баг при использовании Android R8, ждем фикса в 3.2.1

#ktor #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
21🔥6
🐱 Ktorm - Kotlin ORM где вам не надо писать сырые запросы, а все красиво через API

#kotlin #sql
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥51🤔165🤯1
Media is too big
VIEW IN TELEGRAM
📹 Посмотрел доклад (EN,45м) про Rich Error в Kotlin (ожидаются в версии 2.4). Конечно это новый уровень обработки ошибок и упрощения написания кода. Очень жду фичу!

На днях выложу видео где расскажу простым языком все изменения и расскажу как поменяет язык!

#kotlin #kotlinconf25
Please open Telegram to view this post
VIEW IN TELEGRAM
38👍4🔥1
Если коротко - теперь появляется в синтаксисе error class и он будет указывать как атрибутом типа (обычно для возвращаемого, но можно и для типов переменных, так и для generic). Фактически теперь не надо писать свои Result типы, а они будут из коробки в языке с удобным синтаксимом обработки.

#kotlin
🔥84🤯17👍82
Media is too big
VIEW IN TELEGRAM
📹 Обязательное использование возвращаемых значений в Kotlin (EN, 30м)

Одна из новых экспериментальных фичей - режим работ компилятора, когда необходимо обработать возвращаемые значения функций. Зачем? Иногда допускаются ошибки из-за пропуска этого момента.

Уже доступно в Kotlin 2.2.0-Beta1. Нужно включить экспериментальные флаги

kotlin {
compilerOptions {
freeCompilerArgs.add("-Xreturn-value-checker=check|full")
}
}


#kotlin #kotlinconf25
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥73
🏝 Вышел Kotlin 2.2.0

Что нового в релизе языка:
👉 Превью context parametr
👉 Non-local break и continue теперь stable
👉 Kotlin/JVM: изменения в генерации метода по умолчанию
👉 Kotlin/Native: улучшения в управлением памятью
👉 Kotlin/Wasm: wasmJs таргет отделили от js таргета
🐘 Поддержка Gradle 7.6.3 - 8.14
👉 Base64 стало Stable

#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥436
Допускали ли вы баги (креши, некорректное поведение и прочее) по причине игнорирования возвращаемого значения в функции?
Anonymous Poll
20%
Да
46%
Нет
27%
Затрудняюсь ответить
7%
Не участвую в опросе
🔥84
🏝 Вышел KotlinX Serialization 1.9.0 без серьёзных изменений кроме обновления до Kotlin 2.2.0 и предоставления сериализаторов для kotlin.time.Instant

#kotlin #kotlinx
Please open Telegram to view this post
VIEW IN TELEGRAM
24🎉10👍4🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
🐱 LensLogger - KMP опенсорс библиотека для Android, iOS и Desktop чтобы отслеживать сетевые запросы через Ktor клиент и изучать их прямо из вашего приложения.

Подключаете зависимости и делается инициализацию
val client = HttpClient(engine) {
// body
install(LensHttpLogger){
level = LogLevel.ALL
}
}


#kotlin #kmp #ktor
Please open Telegram to view this post
VIEW IN TELEGRAM
43👍16🔥7
🚀 В Jetpack Paging 3.4.0-alpha01 добавили поддержку новых таргетов: watchos, tvos, mingwX64, watchosDeviceArm64 и linuxArm64

Библиотека для пагинации от Google уже давно обзавелась поддержкой iOS и Desktop, а вот в будущей версии и закроются остальный части, кроме JS и WASM.

#android #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍244
Уже успели попробовать в продакшен проектах Kotlin Context Parameter? Появились в Kotlin 2.2.0 в экспериментальном режиме. Делитесь впечатлениями

// UserService defines the dependency required in the context
interface UserService {
fun log(message: String)
fun findUserById(id: Int): String
}

// Declares a function with a context parameter
context(users: UserService)
fun outputMessage(message: String) {
// Uses log from the context
users.log("Log: $message")
}

// Declares a property with a context parameter
context(users: UserService)
val firstUser: String
// Uses findUserById from the context
get() = users.findUserById(1)
10👍6
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
Forwarded from Android Broadcast
🤖 Jetpack Lifecycle теперь поддерживает все KMP тартеты

В версии Jetpack Lifecycle 2.9.2 добавили поддержку WasmJS тартега, а это значит что библиотека теперь может работать на всех KMP таргетах: JVM (Android, Desktop), Native (Linux, iOS, watchOS, macOS, MinGW) и Web (JavaScript, WasmJS)

#android #kmp @wasmjs #jetpackupdate
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥39👍19
🏝 Вышел релиз 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