Kotlin/Native — bu, Kotlin kodunu birbaşa nativ maşın koduna çevirən, virtual maşın olmadan işləyən kompilyatordur. JVM versiyasından fərqli olaraq, Kotlin/Native iOS, Android NDK, macOS, Windows, Linux və WebAssembly üçün icra olunan fayllar yaratmaq üçün LLVM backendindən istifadə edir. Texnologiya Kotlin Multiplatform-un təməlini təşkil edir və JVM-in mövcud olmadığı platformalarda ümumi kodun icrasını təmin edir. JetBrains, 2025 məlumatına görə, Kotlin/Native 13 hədəf platformanı dəstəkləyir və KMM layihələrində kodun 90%-ə qədər təkrar istifadəsinə imkan verir.
Əsas məqamlar
Kotlin/Native — bu, JetBrains şirkəti tərəfindən hazırlanmış Kotlin kodunu nativ maşın koduna çevirmə texnologiyasıdır. Kotlin/JVM-dən əsas fərqi virtual maşına ehtiyacın olmamasıdır — hazır icra olunan fayl yalnız maşın kodu və minimal iş vaxtı mühitini ehtiva edir. Bu, Kotlin tətbiqlərini JVM-in dəstəklənmədiyi cihazlarda və sistemlərdə, o cümlədən iPhone, Apple Watch və quraşdırılmış sistemlərdə işə salmağa imkan verir.
Kotlin/Native-in tarixi 2017-ci ildə Kotlin-in əsas qoluna inteqrasiya olunmuş eksperimental kompilyator layihəsi ilə başlamışdır. 2019-cu ildə KotlinConf-da iOS-un hədəf platforma kimi dəstəyi elan edilmişdir ki, bu da mobil inkişaf üçün dönüş nöqtəsi oldu. Kotlin 1.9.20 versiyasından etibarən Kotlin/Native kompilyatoru sabitliyə nail olmuş və Kotlin Multiplatform tərkibinə defolt olaraq daxil edilmişdir.
Kotlin/Native-in əsas xüsusiyyəti hər bir platforma üçün ayrıca maşın koduna çevrilən ümumi aralıq təmsil IR-dən istifadə etməsidir. Bu, Kotlin-in bütün backendləri: JVM, JS və Native üçün vahid kompilasiya frontendini təmin edir.
Kompilasiya Kotlin/Native bir neçə transformasiya mərhələsindən keçir. Kotlin-dəki mənbə kodu əvvəlcə daxili təmsilə çevrilir, sonra optimallaşdırılır və maşın kodu yaratmaq üçün LLVM backendinə ötürülür. Son mərhələ — iş vaxtı kitabxanaları ilə birləşdirmə və icra olunan fayl və ya dinamik kitabxana yaratmaqdır.
Arxitektura üç əsas komponenti əhatə edir: frontend (təhlil və tip yoxlaması), IR generatoru (aralıq təmsilin qurulması) və LLVM backend (maşın kodunun yaradılması). Bu sxem C++ və Rust üçün Clang kompilyatorlarında istifadə olunan yanaşmaya bənzəyir.
// Kotlin/Native kompilasiyası komanda sətri ilə
kotlinc-native hello.kt -o hello -opt
// iOS arm64 üçün Kotlin Multiplatform vasitəsilə quruluş
./gradlew :shared:linkDebugFrameworkIosArm64
Yaddaşı idarə etmək üçün Kotlin/Native dövri detektorla referans saymağa əsaslanan öz Memory Manager-indən istifadə edir. Kotlin 1.7.20-dən etibarən yeni yaddaş meneceri defolt olaraq işləyir və @ThreadLocal və ya @SharedImmutable annotasiyalarını tələb etmir. Zibil toplayıcı ipləri dayandırmadan işləyir ki, bu da iOS üçün kritik əhəmiyyət daşıyır, çünki sistem əsas ipin uzun müddət bloklanması zamanı tətbiqi məcburi şəkildə bağlaya bilər.
Kompilasiya prosesi beş mərhələyə bölünür: təhlil (mənbə kodunun təhlili), semantik analiz (tip yoxlaması və adların həlli), IR yaradılması (aralıq təmsilin qurulması), optimallaşdırma (sadələşdirmə və ölü kodun silinməsi) və kod generasiyası LLVM vasitəsilə. Hər bir mərhələ müxtəlif modullar üçün paralel yerinə yetirilə bilər ki, bu da böyük layihələrin qurulmasını sürətləndirir.
| Mərhələ | Müddət | Nəticə |
|---|---|---|
| Təhlil | ~10% vaxt | Mənbə kodunun AST ağacı |
| Semantik analiz | ~20% vaxt | Tipləşdirilmiş AST |
| IR yaradılması | ~15% vaxt | Kotlin IR (Intermediate Representation) |
| Optimallaşdırma | ~25% vaxt | Optimallaşdırılmış IR |
| LLVM kod generasiyası | ~30% vaxt | Maşın kodu + icra olunan fayl |
Kotlin/Native kateqoriyalara bölünmüş 13 hədəf platformanı dəstəkləyir. Mobil inkişaf üçün iOS (arm64), Android (arm32, arm64, x86_64) və watchOS mövcuddur. Desktop platformalarına macOS (x64, arm64), Windows (mingw x64) və Linux (x64, arm64, arm32) daxildir. Server və quraşdırılmış inkişaf üçün WebAssembly və əməliyyat sistemi olmadan LLVM üzərində Kotlin/Native (standalone) mövcuddur. Hər bir platforma çıxışda ayrıca framework və ya kitabxana tələb edir.
iOS üçün Kotlin/Native Xcode layihəsinə qoşula bilən universal framework (.framework) yaradır. Android NDK üçün JNI vasitəsilə çağırıla bilən nativ .so kitabxanaları yaradılır. watchOS platforması Kotlin 1.6.0-dan, tvOS isə 1.7.0 versiyasından dəstəklənir. Hər bir arxitektura ayrıca quruluş tələb edir, lakin Kotlin Multiplatform bu prosesi Gradle plugini vasitəsilə avtomatlaşdırır.
macOS və Linux Compose Multiplatform frameworkundan istifadə edərək Kotlin-də nativ desktop tətbiqlərinin hazırlanması üçün istifadə olunur. Windows (MinGW) platforması Kotlin 1.3.70-dən dəstəklənir və JVM quraşdırmadan Windows tətbiqləri yaratmağa imkan verir. Server inkişafı üçün Kotlin/Native JVM-in mövcud olmadığı mühitlərdə, məsələn, scratch və ya Alpine əsasında minimal təsvirə malik Docker konteynerlərində istifadə oluna bilər.
| Kateqoriya | Platforma | Arxitektura |
|---|---|---|
| Mobil | iOS | arm64, simulator (x64, arm64) |
| Mobil | Android NDK | arm32, arm64, x86, x86_64 |
| Geyilə bilən | watchOS | arm64, simulator (x64) |
| Desktop | macOS | x64, arm64 |
| Desktop | Windows | mingw x64 |
| Desktop | Linux | x64, arm64, arm32 |
iOS KMM kontekstində Kotlin/Native-in əsas hədəf platformasıdır. Kompilyator bütün ümumi kodu ehtiva edən iOS frameworki yaradır, sonra isə Xcode layihəsinə qoşulur. Framework həm statik, həm də dinamik birləşməni dəstəkləyir. Kotlin/Native Kotlin sinifləri və funksiyaları üçün Objective-C örtükləri yaradaraq Swift və Objective-C kodu ilə birbaşa inteqrasiyanı təmin edir.
iOS ilə inteqrasiya yaradılmış frameworku qoşmaq üçün Xcode konfiqurasiyasını tələb edir. Kotlin Multiplatform bu prosesi Xcode Build Phases-dən işə salınan embedAndSignAppleFrameworkForXcode tapşırığı ilə avtomatlaşdırır. Debug üçün Kotlin/Native iOS simulyatorunda tətbiq işə salındıqda ümumi modul kodunda breakpoint-ləri dəstəkləyir.
// iOS frameworkuna kompilyasiya olunmuş Kotlin kodu
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 kodu ilə hər iki istiqamətdə işləyir. Kotlin/Native Kotlin sinifləri üçün Objective-C başlıqları yaradır ki, bunlar avtomatik olaraq Swift-dən əlçatan olur. Əks əlaqə Kotlin funksiyalarını müəyyən Objective-C adı ilə ixrac etmək üçün @ObjCName annotasiyası ilə təmin edilir. Kotlin kolleksiyaları avtomatik olaraq NSArray və NSDictionary-ə çevrilir, Kotlin korutinləri isə SKIE kitabxanası vasitəsilə Combine publisher-lərə bükülür. Kotlin-dən iOS framework-ləri ilə işləmək üçün cinterop — Objective-C başlıqlarına Kotlin bağlantıları yaratmaq aləti istifadə olunur.
Kotlin/Native ilə işə başlamaq üçün Kotlin Multiplatform plaginini və hədəf platformaları göstərən build.gradle.kts konfiqurasiyası tələb olunur. iOS və Android dəstəyi ilə KMM layihəsi üçün minimal konfiqurasiyaya baxaq.
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")
}
}
}
Quruluş konfiqurasiyasından sonra platformadan asılı kod əlavə edilə bilər. Kotlin/Native Kotlin örtükləri vasitəsilə iOS funksiyalarına giriş təmin edir. Məsələn, iOS-da cihaz UUID-ni əldə etmək Foundation-dan NSUUID çağırışını tələb edir.
import platform.Foundation.NSUUID
fun getDeviceId(): String {
return NSUUID().UUIDString()
}
fun currentTimestampMillis(): Long {
return (platform.Foundation.NSDate().timeIntervalSince1970 * 1000).toLong()
}
iOS frameworkunu yaratmaq üçün linkDebugFrameworkIosArm64 və ya istehsal üçün linkReleaseFrameworkIosArm64 Gradle tapşırığı istifadə olunur. Quruluşdan sonra framework build/bin/iosArm64/debugFramework/ ünvanında yerləşir. Xcode layihəsinə qoşulma Pods Podfile vasitəsilə və ya frameworku General → Frameworks, Libraries and Embedded Content bölməsinə əlavə etməklə həyata keçirilir.
// iOS arm64 üçün release frameworkun qurulması
./gradlew :shared:linkReleaseFrameworkIosArm64
// Universal framework x86_64 + arm64 qurulması
./gradlew :shared:linkReleaseFrameworkIosX64 \
:shared:linkReleaseFrameworkIosArm64
// App Store üçün XCFramework yaradın
./gradlew :shared:assembleReleaseXCFramework
Kotlin/Native və Kotlin/JVM arxitektura, performans və tətbiq sahəsinə görə fərqlənir. Kotlin/JVM kodu JVM-də icra olunan bayt koduna çevirir ki, bu da nəhəng Java kitabxana ekosisteminə giriş imkanı verir, lakin quraşdırılmış virtual maşın tələb edir. Kotlin/Native xarici asılılıqlar olmadan icra olunan fayl yaradır, lakin daha məhdud kitabxana ekosisteminə malikdir.
Kotlin/Native-in işə düşmə müddəti daha yüksəkdir, çünki JVM-in yüklənməsi tələb olunmur. JetBrains benchmarklarına görə, Kotlin/Native-də Hello World tətbiqi 0.003 saniyədə işə düşür, Kotlin/JVM isə virtual maşının yüklənməsi üçün 0.5–1 saniyə tələb edir. Lakin Kotlin/Native-in icra olunan faylının ölçüsü daxil edilmiş iş vaxtı mühitinə görə 2–3 dəfə böyük ola bilər.
| Xüsusiyyət | Kotlin/Native | Kotlin/JVM |
|---|---|---|
| Hədəf platformalar | iOS, macOS, Windows, Linux, WebAssembly, embedded | Serverlər, Android, desktop (JVM) |
| Asılılıqlar | İş vaxtı mühiti olmadan (müstəqil) | JVM tələb olunur (JDK/JRE) |
| İşə düşmə vaxtı | ~3 ms | ~500–1000 ms |
| Ekosistem | Məhdud (Kotlin + Interop) | Tam (Kotlin + Java + Android SDK) |
| Binar ölçüsü | ~1–5 MB (iş vaxtı ilə) | ~100–500 KB (JAR) |
Kotlin/Native və Kotlin/JVM arasında seçim hədəf platformadan asılıdır. Layihə iOS-a yönəlmişsə və ya minimal resurs istehlakı tələb edirsə, Kotlin/Native yeganə seçimdir. Android inkişafı üçün Kotlin/JVM standart olaraq qalır, baxmayaraq ki, Kotlin/Native nativ performans tələb edən NDK komponentləri üçün istifadə olunur. Çoxplatformalı layihələrdə Kotlin Multiplatform hər iki yanaşmanı birləşdirir: ümumi kod iOS üçün Kotlin/Native və Android üçün Kotlin/JVM vasitəsilə kompilyasiya olunur.
Tez-tez verilən suallar
Kotlin/Native kodu virtual maşın olmadan nativ maşın koduna kompilyasiya edir, Kotlin/JVM isə quraşdırılmış JVM tələb edən bayt koduna çevirir. Kotlin/Native iOS, quraşdırılmış sistemlər və WebAssembly üçün, Kotlin/JVM isə Android və serverlər üçün istifadə olunur.
Bəli, Kotlin/Native konsol tətbiqləri, nativ plaginlər və ya istənilən dəstəklənən platforma üçün kitabxanalar yaratmaq üçün müstəqil kompilyator kimi istifadə edilə bilər. KMM yalnız çoxplatformalı kodun təşkilini asanlaşdırır.
Memory Manager Kotlin/Native avtomatik dövri detektorla referans saymaqdan istifadə edir. Kotlin 1.7.20-dən etibarən zibil toplayıcı @ThreadLocal annotasiyalarını tələb etmir və iOS əsas ipini dayandırmadan işləyir.
cinterop vasitəsilə bütün iOS frameworkləri mövcuddur: Foundation, UIKit, CoreData, CoreBluetooth, MapKit və yüzlərlə başqası. JetBrains Kotlin/Native tərkibində standart iOS kitabxanaları üçün hazır bağlantılar təqdim edir.
Debug üçün qoşulmuş Kotlin/Native frameworku ilə Xcode istifadə olunur. Kotlin kodundakı breakpoint-lər iOS simulyatorunda işə salındıqda işləyir. Cihaz üçün Debug quruluşu və Apple developer profili tələb olunur.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun