Kotlin/Native — bu Kotlin kodini to'g'ridan-to'g'ri native mashina kodiga kompilyatsiya qiluvchi, virtual mashinasiz ishlaydigan kompilyatordir. JVM versiyasidan farqli o'laroq, Kotlin/Native iOS, Android NDK, macOS, Windows, Linux va WebAssembly uchun bajariladigan fayllarni yaratishda LLVM backendidan foydalanadi. Texnologiya Kotlin Multiplatform asosini tashkil etadi va JVM mavjud bo'lmagan platformalarda umumiy kodning bajarilishini ta'minlaydi. JetBrains, 2025 ma'lumotiga ko'ra, Kotlin/Native 13 ta maqsadli platformani qo'llab-quvvatlaydi va KMM loyihalarida kodning 90% gacha qayta ishlatilishiga imkon beradi.
Asosiy fikrlar
Kotlin/Native — bu JetBrains kompaniyasi tomonidan ishlab chiqilgan Kotlin kodini native mashina kodiga kompilyatsiya qilish texnologiyasidir. Kotlin/JVM dan asosiy farqi virtual mashinaga ehtiyoj yo'qligidadir — tayyor bajariladigan fayl faqat mashina kodi va minimal ish vaqti muhitini o'z ichiga oladi. Bu Kotlin ilovalarini JVM qo'llab-quvvatlanmaydigan qurilmalar va tizimlarda, jumladan iPhone, Apple Watch va o'rnatilgan tizimlarda ishga tushirish imkonini beradi.
Kotlin/Native tarixi 2017-yilda Kotlinning asosiy tarmog'iga integratsiya qilingan eksperimental kompilyator loyihasidan boshlandi. 2019-yilda KotlinConf da iOS maqsadli platforma sifatida qo'llab-quvvatlanishi e'lon qilindi, bu mobil ishlanma uchun burilish nuqtasi bo'ldi. Kotlin 1.9.20 versiyasidan boshlab Kotlin/Native kompilyatori barqarorlikka erishdi va Kotlin Multiplatform tarkibiga sukut bo'yicha kiritildi.
Kotlin/Native ning asosiy xususiyati har bir platforma uchun alohida mashina kodiga kompilyatsiya qilinadigan umumiy oraliq vakillik IR dan foydalanishdir. Bu Kotlinning barcha backendlari: JVM, JS va Native uchun yagona kompilyatsiya frontendini ta'minlaydi.
Kompilyatsiya Kotlin/Native bir necha transformatsiya bosqichlaridan o'tadi. Kotlin dastlabki kodi avval ichki vakillikka aylantiriladi, so'ngra optimallashtiriladi va mashina kodini yaratish uchun LLVM backendiga uzatiladi. Yakuniy bosqich — ish vaqti kutubxonalari bilan bog'lash va bajariladigan fayl yoki dinamik kutubxona yaratishdir.
Arxitektura uchta asosiy komponentni o'z ichiga oladi: frontend (tahlil va tur tekshiruvi), IR generatori (oraliq vakillikni qurish) va LLVM backend (mashina kodini yaratish). Bu sxema C++ va Rust uchun Clang kompilyatorlarida qo'llaniladigan yondashuvga o'xshaydi.
// Kotlin/Native kompilyatsiyasi buyruq qatori orqali
kotlinc-native hello.kt -o hello -opt
// iOS arm64 uchun Kotlin Multiplatform orqali qurish
./gradlew :shared:linkDebugFrameworkIosArm64
Xotirani boshqarish uchun Kotlin/Native tsiklik detektor bilan havolalarni hisoblashga asoslangan o'zining Memory Manager idan foydalanadi. Kotlin 1.7.20 dan boshlab yangi xotira boshqaruvchisi sukut bo'yicha ishlaydi va @ThreadLocal yoki @SharedImmutable annotatsiyalarini talab qilmaydi. Axlat yig'uvchi oqimlarni to'xtatmasdan ishlaydi, bu iOS uchun juda muhim, chunki tizim asosiy oqimning uzoq bloklanishida ilovani majburiy yopishi mumkin.
Kompilyatsiya jarayoni besh bosqichga bo'linadi: tahlil (dastlabki kodni tahlil qilish), semantik analiz (tur tekshiruvi va nomlarni hal qilish), IR yaratish (oraliq vakillikni qurish), optimallashtirish (soddalashtirish va o'lik kodni olib tashlash) va kod generatsiyasi LLVM orqali. Har bir bosqich turli modullar uchun parallel bajarilishi mumkin, bu katta loyihalarni qurishni tezlashtiradi.
| Bosqich | Davomiylik | Natija |
|---|---|---|
| Tahlil | ~10% vaqt | Dastlabki kodning AST daraxti |
| Semantik analiz | ~20% vaqt | Tiplashtirilgan AST |
| IR yaratish | ~15% vaqt | Kotlin IR (Intermediate Representation) |
| Optimallashtirish | ~25% vaqt | Optimallashtirilgan IR |
| LLVM kod generatsiyasi | ~30% vaqt | Mashina kodi + bajariladigan fayl |
Kotlin/Native kategorialarga bo'lingan 13 ta maqsadli platformani qo'llab-quvvatlaydi. Mobil ishlanma uchun iOS (arm64), Android (arm32, arm64, x86_64) va watchOS mavjud. Desktop platformalarga macOS (x64, arm64), Windows (mingw x64) va Linux (x64, arm64, arm32) kiradi. Server va o'rnatilgan ishlanma uchun WebAssembly va operatsion tizimsiz LLVMda Kotlin/Native (standalone) mavjud. Har bir platforma chiqishda alohida framework yoki kutubxonani talab qiladi.
iOS uchun Kotlin/Native Xcode loyihasiga ulanishi mumkin bo'lgan universal framework (.framework) yaratadi. Android NDK uchun JNI orqali chaqirilishi mumkin bo'lgan native .so kutubxonalari yaratiladi. watchOS platformasi Kotlin 1.6.0 dan, tvOS esa 1.7.0 versiyasidan qo'llab-quvvatlanadi. Har bir arxitektura alohida qurilishni talab qiladi, ammo Kotlin Multiplatform bu jarayonni Gradle plagini orqali avtomatlashtiradi.
macOS va Linux Compose Multiplatform frameworkidan foydalanib Kotlinda native desktop ilovalarini yaratish uchun ishlatiladi. Windows (MinGW) platformasi Kotlin 1.3.70 dan qo'llab-quvvatlanadi va JVM o'rnatmasdan Windows ilovalarini yaratishga imkon beradi. Server ishlanmasi uchun Kotlin/Native JVM mavjud bo'lmagan muhitlarda, masalan, scratch yoki Alpine asosidagi minimal tasvirli Docker konteynerlarida ishlatilishi mumkin.
| Kategoriya | Platforma | Arxitektura |
|---|---|---|
| Mobil | iOS | arm64, simulyator (x64, arm64) |
| Mobil | Android NDK | arm32, arm64, x86, x86_64 |
| Taqiladigan | watchOS | arm64, simulyator (x64) |
| Desktop | macOS | x64, arm64 |
| Desktop | Windows | mingw x64 |
| Desktop | Linux | x64, arm64, arm32 |
iOS KMM kontekstida Kotlin/Native ning asosiy maqsadli platformasidir. Kompilyator barcha umumiy kodni o'z ichiga olgan iOS frameworkini yaratadi, keyin esa Xcode loyihasiga ulanadi. Framework ham statik, ham dinamik ulanishni qo'llab-quvvatlaydi. Kotlin/Native Kotlin sinflari va funktsiyalari uchun Objective-C o'ramlarini yaratadi, Swift va Objective-C kodi bilan to'g'ridan-to'g'ri integratsiyani ta'minlaydi.
iOS bilan integratsiya yaratilgan frameworkni ulash uchun Xcode sozlamasini talab qiladi. Kotlin Multiplatform bu jarayonni Xcode Build Phases dan ishga tushiriladigan embedAndSignAppleFrameworkForXcode vazifasi bilan avtomatlashtiradi. Nosozliklarni tuzatish uchun Kotlin/Native iOS simulyatorida ilova ishga tushirilganda umumiy modul kodidagi to'xtash nuqtalarini qo'llab-quvvatlaydi.
// iOS frameworkiga kompilyatsiya qilingan Kotlin kodi
package com.itsectr.shared
class GreetingProvider {
fun createGreeting(): String {
return "Hello from Kotlin/Native!"
}
fun formatVersion(major: Int, minor: Int): String {
return "v$major.$minor"
}
}
Interop iOS kodi bilan ikki yo'nalishda ishlaydi. Kotlin/Native Kotlin sinflari uchun Objective-C sarlavhalarini yaratadi, ular avtomatik ravishda Swift dan mavjud bo'ladi. Teskari aloqa Kotlin funktsiyalarini belgilangan Objective-C nomi bilan eksport qilish uchun @ObjCName annotatsiyasi bilan ta'minlanadi. Kotlin to'plamlari avtomatik ravishda NSArray va NSDictionary ga aylantiriladi, Kotlin korutinlari esa SKIE kutubxonasi orqali Combine publisher larga o'raladi. Kotlin dan iOS frameworklari bilan ishlash uchun cinterop — Objective-C sarlavhalariga Kotlin bog'lanishlarini yaratish vositasi ishlatiladi.
Kotlin/Native bilan ishlashni boshlash uchun Kotlin Multiplatform plagini va maqsadli platformalarni ko'rsatadigan build.gradle.kts sozlamasi talab qilinadi. iOS va Android qo'llab-quvvatlashi bilan KMM loyihasi uchun minimal konfiguratsiyani ko'rib chiqamiz.
plugins {
kotlin("multiplatform") version "2.0.21"
}
kotlin {
iosArm64()
iosSimulatorArm64()
sourceSets {
commonMain.dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0")
}
iosMain.dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0")
}
}
}
Qurilish sozlamasidan so'ng platformaga bog'liq kod qo'shilishi mumkin. Kotlin/Native Kotlin o'ramlari orqali iOS funktsiyalariga kirishni ta'minlaydi. Masalan, iOS da qurilma UUID sini olish Foundation dan NSUUID chaqiruvini talab qiladi.
import platform.Foundation.NSUUID
fun getDeviceId(): String {
return NSUUID().UUIDString()
}
fun currentTimestampMillis(): Long {
return (platform.Foundation.NSDate().timeIntervalSince1970 * 1000).toLong()
}
iOS frameworkini yaratish uchun linkDebugFrameworkIosArm64 yoki ishlab chiqarish uchun linkReleaseFrameworkIosArm64 Gradle vazifasi ishlatiladi. Qurilishdan so'ng framework build/bin/iosArm64/debugFramework/ manzilida joylashadi. Xcode loyihasiga ulanish Pods Podfile orqali yoki frameworkni General → Frameworks, Libraries and Embedded Content bo'limiga qo'shish orqali amalga oshiriladi.
// iOS arm64 uchun release frameworkini qurish
./gradlew :shared:linkReleaseFrameworkIosArm64
// Universal framework x86_64 + arm64 qurish
./gradlew :shared:linkReleaseFrameworkIosX64 \
:shared:linkReleaseFrameworkIosArm64
// App Store uchun XCFramework yaratish
./gradlew :shared:assembleReleaseXCFramework
Kotlin/Native va Kotlin/JVM arxitektura, samaradorlik va qo'llanish sohasiga ko'ra farqlanadi. Kotlin/JVM kodni JVM da bajariladigan bayt kodiga kompilyatsiya qiladi, bu katta Java kutubxona ekotizimiga kirishni beradi, lekin o'rnatilgan virtual mashinani talab qiladi. Kotlin/Native tashqi bog'liqliklarsiz bajariladigan fayl yaratadi, ammo cheklangan kutubxona ekotizimiga ega.
Kotlin/Native ning ishga tushish vaqti yuqoriroq, chunki JVM ni yuklash talab qilinmaydi. JetBrains benchmarklariga ko'ra, Kotlin/Native da Hello World ilovasi 0.003 soniyada ishga tushadi, Kotlin/JVM esa virtual mashinani yuklash uchun 0.5–1 soniya talab qiladi. Biroq Kotlin/Native ning bajariladigan fayl hajmi kiritilgan ish vaqti muhiti tufayli 2–3 marta katta bo'lishi mumkin.
| Xususiyat | Kotlin/Native | Kotlin/JVM |
|---|---|---|
| Maqsadli platformalar | iOS, macOS, Windows, Linux, WebAssembly, embedded | Serverlar, Android, desktop (JVM) |
| Bog'liqliklar | Ish vaqti muhitisiz (mustaqil) | JVM talab qilinadi (JDK/JRE) |
| Ishga tushish vaqti | ~3 ms | ~500–1000 ms |
| Ekotizim | Cheklangan (Kotlin + Interop) | To'liq (Kotlin + Java + Android SDK) |
| Binar hajmi | ~1–5 MB (ish vaqti bilan) | ~100–500 KB (JAR) |
Kotlin/Native va Kotlin/JVM o'rtasidagi tanlov maqsadli platformaga bog'liq. Agar loyiha iOS ga yo'naltirilgan bo'lsa yoki minimal resurs iste'molini talab qilsa, Kotlin/Native yagona tanlovdir. Android ishlanmasi uchun Kotlin/JVM standart bo'lib qoladi, garchi Kotlin/Native native samaradorlik talab qiladigan NDK komponentlari uchun ishlatiladi. Ko'p platformali loyihalarda Kotlin Multiplatform ikkala yondashuvni birlashtiradi: umumiy kod iOS uchun Kotlin/Native va Android uchun Kotlin/JVM orqali kompilyatsiya qilinadi.
Tez-tez so'raladigan savollar
Kotlin/Native kodni virtual mashinasiz native mashina kodiga kompilyatsiya qiladi, Kotlin/JVM esa o'rnatilgan JVM talab qiladigan bayt kodiga kompilyatsiya qiladi. Kotlin/Native iOS, o'rnatilgan tizimlar va WebAssembly uchun, Kotlin/JVM Android va serverlar uchun ishlatiladi.
Ha, Kotlin/Native konsol ilovalari, native plaginlar yoki istalgan qo'llab-quvvatlanadigan platforma uchun kutubxonalar yaratishda mustaqil kompilyator sifatida ishlatilishi mumkin. KMM faqat ko'p platformali kodni tashkil qilishni soddalashtiradi.
Memory Manager Kotlin/Native avtomatik tsiklik detektor bilan havolalarni hisoblashdan foydalanadi. Kotlin 1.7.20 dan boshlab axlat yig'uvchi @ThreadLocal annotatsiyalarini talab qilmaydi va iOS asosiy oqimini to'xtatmasdan ishlaydi.
cinterop orqali barcha iOS frameworklari mavjud: Foundation, UIKit, CoreData, CoreBluetooth, MapKit va yuzlab boshqalar. JetBrains Kotlin/Native tarkibida standart iOS kutubxonalari uchun tayyor bog'lanishlarni taqdim etadi.
Nosozliklarni tuzatish uchun ulangan Kotlin/Native frameworki bilan Xcode ishlatiladi. Kotlin kodidagi to'xtash nuqtalari iOS simulyatorida ishga tushirilganda ishlaydi. Qurilma uchun Debug qurilishi va Apple ishlab chiqaruvchi profili talab qilinadi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.