Kotlin/Native — то је компајлер Kotlin кода директно у изворни машински код, који ради без виртуелне машине. За разлику од JVM верзије, Kotlin/Native користи LLVM бекенд за генерисање извршних датотека за iOS, Android NDK, macOS, Windows, Linux и WebAssembly. Технологија је темељ Kotlin Multiplatform и обезбеђује извршавање заједничког кода на платформама где JVM није доступна. Према JetBrains, 2025, Kotlin/Native подржава 13 циљних платформи и омогућава поновну употребу до 90% кода у KMM пројектима.
Главне тачке
Kotlin/Native — то је технологија компајлације Kotlin кода у изворни машински код, развијена од стране компаније JetBrains. Главна разлика од Kotlin/JVM је у одсуству потребе за виртуелном машином — готова извршна датотека садржи само машински код и минимално окружење извршавања. Ово омогућава покретање Kotlin апликација на уређајима и системима где JVM није подржана, укључујући iPhone, Apple Watch и уграђене системе.
Историја Kotlin/Native почела је са пројектом експерименталног компајлера који је 2017. године интегрисан у главну грану Kotlin. 2019. године на KotlinConf-у најављена је подршка за iOS као циљну платформу, што је постало прекретница за мобилни развој. Од верзије Kotlin 1.9.20 компајлер Kotlin/Native је достигао стабилност и подразумевано је укључен у Kotlin Multiplatform.
Кључна карактеристика Kotlin/Native је употреба заједничког посредног представљања IR, које се компајлира у машински код за сваку платформу посебно. Ово обезбеђује јединствени фронтенд компајлације за све бекенде Kotlin: JVM, JS и Native.
Компајлација Kotlin/Native пролази кроз неколико фаза трансформације. Изворни код на Kotlin-у се прво претвара у унутрашње представљање, затим оптимизује и прослеђује LLVM бекенду за генерисање машинског кода. Завршна фаза је повезивање са библиотекама окружења извршавања и креирање извршне датотеке или динамичке библиотеке.
Архитектура укључује три кључне компоненте: фронтенд (парсирање и провера типова), IR генератор (изградња посредног представљања) и LLVM бекенд (генерисање машинског кода). Ова шема је слична приступу који се користи у компајлерима Clang за C++ и Rust.
// Kotlin/Native компајлација преко командне линије
kotlinc-native hello.kt -o hello -opt
// Изградња за iOS arm64 преко Kotlin Multiplatform
./gradlew :shared:linkDebugFrameworkIosArm64
За управљање меморијом Kotlin/Native користи сопствени Memory Manager, заснован на бројању референци са цикличним детектором. Од Kotlin 1.7.20 нови менаџер меморије ради подразумевано и не захтева анотације @ThreadLocal или @SharedImmutable. Сакупљач смећа ради без заустављања нити, што је критично за iOS, где систем може присилно затворити апликацију при дуготрајном блокирању главне нити.
Процес компајлације дели се на пет фаза: парсирање (анализа изворног кода), семантичка анализа (провера типова и разрешавање имена), генерисање IR (изградња посредног представљања), оптимизација (поједностављење и уклањање мртвог кода) и генерисање кода кроз LLVM. Свака фаза може се извршавати паралелно за различите модуле, што убрзава изградњу великих пројеката.
| Фаза | Трајање | Резултат |
|---|---|---|
| Парсирање | ~10% времена | AST стабло изворног кода |
| Семантичка анализа | ~20% времена | Типизирано AST |
| Генерисање IR | ~15% времена | Kotlin IR (Intermediate Representation) |
| Оптимизација | ~25% времена | Оптимизовани IR |
| LLVM генерисање кода | ~30% времена | Машински код + извршна датотека |
Kotlin/Native подржава 13 циљних платформи, подељених у категорије. За мобилни развој доступни су iOS (arm64), Android (arm32, arm64, x86_64) и watchOS. Десктоп платформе укључују macOS (x64, arm64), Windows (mingw x64) и Linux (x64, arm64, arm32). За серверски и уграђени развој доступни су WebAssembly и Kotlin/Native на LLVM без оперативног система (standalone). Свака платформа захтева посебан фрејмворк или библиотеку на излазу.
За iOS, Kotlin/Native генерише универзални фрејмворк (.framework) који може бити повезан са Xcode пројектом. За Android NDK креирају се изворне .so библиотеке које се могу позивати преко JNI. Платформа watchOS подржана је од Kotlin 1.6.0, а tvOS од верзије 1.7.0. Свака архитектура захтева посебну изградњу, али Kotlin Multiplatform аутоматизује овај процес кроз Gradle прикључак.
macOS и Linux користе се за развој изворних десктоп апликација на Kotlin-у помоћу фрејмворка Compose Multiplatform. Платформа Windows (MinGW) подржана је од Kotlin 1.3.70 и омогућава креирање Windows апликација без инсталације JVM. За серверски развој, Kotlin/Native може се користити у окружењима где JVM није доступна, на пример, у Docker контејнерима са минималном сликом заснованом на scratch или Alpine.
| Категорија | Платформа | Архитектура |
|---|---|---|
| Мобилне | iOS | arm64, симулатор (x64, arm64) |
| Мобилне | Android NDK | arm32, arm64, x86, x86_64 |
| Носиве | watchOS | arm64, симулатор (x64) |
| Десктоп | macOS | x64, arm64 |
| Десктоп | Windows | mingw x64 |
| Десктоп | Linux | x64, arm64, arm32 |
iOS је главна циљна платформа Kotlin/Native у контексту KMM. Компајлер креира iOS фрејмворк који садржи сав заједнички код, који се затим повезује са Xcode пројектом. Фрејмворк подржава и статичко и динамичко повезивање. Kotlin/Native генерише Objective-C омотаче за Kotlin класе и функције, обезбеђујући директну интеграцију са кодом на Swift-у и Objective-C.
Интеграција са iOS-ом захтева подешавање Xcode-а за повезивање генерисаног фрејмворка. Kotlin Multiplatform аутоматизује овај процес помоћу embedAndSignAppleFrameworkForXcode задатка који се покреће из Xcode Build Phases-а. За отклањање грешака, Kotlin/Native подржава тачке прекида у коду заједничког модула при покретању апликације на iOS симулатору.
// Kotlin код компајлиран у iOS фрејмворк
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 кодом ради у оба смера. Kotlin/Native генерише Objective-C заглавља за Kotlin класе која аутоматски постају доступна из Swift-а. Повратна веза обезбеђује се анотацијом @ObjCName за извоз Kotlin функција под одређеним Objective-C именом. Kotlin колекције се аутоматски конвертују у NSArray и NSDictionary, а Kotlin корутине се облажу у Combine publishers-е путем библиотеке SKIE. За рад са iOS фрејмворцима из Kotlin-а користи се cinterop — алат за генерисање Kotlin веза према Objective-C заглављима.
За почетак рада са Kotlin/Native-ом потребно је подешавање build.gradle.kts са навођењем Kotlin Multiplatform прикључка и циљних платформи. Размотримо минималну конфигурацију за KMM пројекат са подршком за iOS и Android.
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")
}
}
}
Након подешавања изградње може се додати код зависан од платформе. Kotlin/Native пружа приступ iOS функцијама кроз Kotlin омотаче. На пример, добијање UUID уређаја на iOS-у захтева позивање NSUUID-а из Foundation-а.
import platform.Foundation.NSUUID
fun getDeviceId(): String {
return NSUUID().UUIDString()
}
fun currentTimestampMillis(): Long {
return (platform.Foundation.NSDate().timeIntervalSince1970 * 1000).toLong()
}
За генерисање iOS фрејмворка користи се Gradle задатак linkDebugFrameworkIosArm64 или linkReleaseFrameworkIosArm64 за продукцију. Након изградње, фрејмворк се налази у build/bin/iosArm64/debugFramework/. Повезивање са Xcode пројектом врши се преко Pods Podfile-а или додавањем фрејмворка у одељак General → Frameworks, Libraries and Embedded Content.
// Изградња release фрејмворка за iOS arm64
./gradlew :shared:linkReleaseFrameworkIosArm64
// Изградња универзалног фрејмворка x86_64 + arm64
./gradlew :shared:linkReleaseFrameworkIosX64 \
:shared:linkReleaseFrameworkIosArm64
// Креирајте XCFramework за App Store
./gradlew :shared:assembleReleaseXCFramework
Kotlin/Native и Kotlin/JVM разликују се по архитектури, перформансама и области примене. Kotlin/JVM компајлира код у бајткод који се извршава на JVM, што пружа приступ огромном екосистему Java библиотека, али захтева инсталирану виртуелну машину. Kotlin/Native генерише извршну датотеку без спољашњих зависности, али са ограниченијим екосистемом библиотека.
Перформансе времена покретања Kotlin/Native-а су веће јер није потребно учитавање JVM. Према бенчмарковима JetBrains-а, Hello World апликација на Kotlin/Native-у покреће се за 0.003 секунде, док је Kotlin/JVM потребно 0.5–1 секунда за учитавање виртуелне машине. Међутим, величина извршне датотеке Kotlin/Native-а може бити 2–3 пута већа због укљученог окружења извршавања.
| Карактеристика | Kotlin/Native | Kotlin/JVM |
|---|---|---|
| Циљне платформе | iOS, macOS, Windows, Linux, WebAssembly, embedded | Сервери, Android, десктоп (JVM) |
| Зависности | Без окружења извршавања (самодовољан) | Захтева JVM (JDK/JRE) |
| Време покретања | ~3 ms | ~500–1000 ms |
| Екосистем | Ограничен (Kotlin + Interop) | Потпун (Kotlin + Java + Android SDK) |
| Величина бинарне датотеке | ~1–5 MB (са окружењем) | ~100–500 KB (JAR) |
Избор између Kotlin/Native-а и Kotlin/JVM-а зависи од циљне платформе. Ако је пројекат усмерен на iOS или захтева минималну потрошњу ресурса, Kotlin/Native је једина опција. За Android развој, Kotlin/JVM остаје стандард, иако се Kotlin/Native користи за NDK компоненте где је потребна изворна перформанса. У вишeплатформним пројектима, Kotlin Multiplatform комбинује оба приступа: заједнички код се компајлира кроз Kotlin/Native за iOS и кроз Kotlin/JVM за Android.
Често постављана питања
Kotlin/Native компајлира код у изворни машински код без виртуелне машине, а Kotlin/JVM — у бајткод који захтева инсталирану JVM. Kotlin/Native се користи за iOS, уграђене системе и WebAssembly, Kotlin/JVM — за Android и сервере.
Да, Kotlin/Native се може користити као самостални компајлер за креирање конзолних апликација, изворних прикључака или библиотека за било коју подржану платформу. KMM само поједностављује организацију вишeплатформног кода.
Memory Manager Kotlin/Native користи бројање референци са аутоматским цикличним детектором. Од Kotlin 1.7.20 сакупљач смећа не захтева анотације @ThreadLocal и ради без заустављања главне iOS нити.
Преко cinterop-а доступни су сви iOS фрејмворци: Foundation, UIKit, CoreData, CoreBluetooth, MapKit и стотине других. JetBrains обезбеђује готове везе за стандардне iOS библиотеке у саставу Kotlin/Native-а.
За отклањање грешака користи се Xcode са повезаним Kotlin/Native фрејмворком. Тачке прекида у Kotlin коду раде при покретању на iOS симулатору. За уређај је потребна Debug изградња и Apple развојни профил.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође