Kotlin/Native — шта је то, компајлер у изворни код и карактеристике

Аутор: IT Sectr Објављено: 2026-06-05 Време читања: 8 мин

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 код у изворни машински код без употребе JVM.
  • LLVM — бекенд компајлера одговоран за генерисање машинског кода за сваку циљну платформу.
  • KMM — Kotlin Multiplatform Mobile користи Kotlin/Native за извршавање заједничког кода на iOS уређајима.
  • Memory Manager — аутоматски сакупљач смећа који ради на основу бројања референци без заустављања нити.
  • Interop — механизам двосмерне интеракције са изворним библиотекама Objective-C, Swift и C.

Шта је Kotlin/Native?

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/Native пролази кроз неколико фаза трансформације. Изворни код на Kotlin-у се прво претвара у унутрашње представљање, затим оптимизује и прослеђује LLVM бекенду за генерисање машинског кода. Завршна фаза је повезивање са библиотекама окружења извршавања и креирање извршне датотеке или динамичке библиотеке.

Архитектура укључује три кључне компоненте: фронтенд (парсирање и провера типова), IR генератор (изградња посредног представљања) и LLVM бекенд (генерисање машинског кода). Ова шема је слична приступу који се користи у компајлерима Clang за C++ и Rust.

kotlin
// 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, где систем може присилно затворити апликацију при дуготрајном блокирању главне нити.

Фазе компајлације Kotlin/Native

Процес компајлације дели се на пет фаза: парсирање (анализа изворног кода), семантичка анализа (провера типова и разрешавање имена), генерисање IR (изградња посредног представљања), оптимизација (поједностављење и уклањање мртвог кода) и генерисање кода кроз LLVM. Свака фаза може се извршавати паралелно за различите модуле, што убрзава изградњу великих пројеката.

ФазаТрајањеРезултат
Парсирање~10% временаAST стабло изворног кода
Семантичка анализа~20% временаТипизирано AST
Генерисање IR~15% временаKotlin IR (Intermediate Representation)
Оптимизација~25% временаОптимизовани IR
LLVM генерисање кода~30% временаМашински код + извршна датотека

Подржане платформе Kotlin/Native

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.

КатегоријаПлатформаАрхитектура
МобилнеiOSarm64, симулатор (x64, arm64)
МобилнеAndroid NDKarm32, arm64, x86, x86_64
НосивеwatchOSarm64, симулатор (x64)
ДесктопmacOSx64, arm64
ДесктопWindowsmingw x64
ДесктопLinuxx64, arm64, arm32

Kotlin/Native за iOS развој

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
// 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"
    }
}

Objective-C и Swift Interop

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.

kotlin
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-а.

kotlin
import platform.Foundation.NSUUID

fun getDeviceId(): String {
    return NSUUID().UUIDString()
}

fun currentTimestampMillis(): Long {
    return (platform.Foundation.NSDate().timeIntervalSince1970 * 1000).toLong()
}

Изградња iOS фрејмворка

За генерисање iOS фрејмворка користи се Gradle задатак linkDebugFrameworkIosArm64 или linkReleaseFrameworkIosArm64 за продукцију. Након изградње, фрејмворк се налази у build/bin/iosArm64/debugFramework/. Повезивање са Xcode пројектом врши се преко Pods Podfile-а или додавањем фрејмворка у одељак General → Frameworks, Libraries and Embedded Content.

kotlin
// Изградња release фрејмворка за iOS arm64
./gradlew :shared:linkReleaseFrameworkIosArm64

// Изградња универзалног фрејмворка x86_64 + arm64
./gradlew :shared:linkReleaseFrameworkIosX64 \
    :shared:linkReleaseFrameworkIosArm64

// Креирајте XCFramework за App Store
./gradlew :shared:assembleReleaseXCFramework

Kotlin/Native vs Kotlin/JVM: поређење

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/NativeKotlin/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?

Kotlin/Native компајлира код у изворни машински код без виртуелне машине, а Kotlin/JVM — у бајткод који захтева инсталирану JVM. Kotlin/Native се користи за iOS, уграђене системе и WebAssembly, Kotlin/JVM — за Android и сервере.

Може ли се Kotlin/Native користити без KMM?

Да, Kotlin/Native се може користити као самостални компајлер за креирање конзолних апликација, изворних прикључака или библиотека за било коју подржану платформу. KMM само поједностављује организацију вишeплатформног кода.

Како Kotlin/Native управља меморијом на iOS-у?

Memory Manager Kotlin/Native користи бројање референци са аутоматским цикличним детектором. Од Kotlin 1.7.20 сакупљач смећа не захтева анотације @ThreadLocal и ради без заустављања главне iOS нити.

Које iOS библиотеке су доступне из Kotlin/Native-а?

Преко cinterop-а доступни су сви iOS фрејмворци: Foundation, UIKit, CoreData, CoreBluetooth, MapKit и стотине других. JetBrains обезбеђује готове везе за стандардне iOS библиотеке у саставу Kotlin/Native-а.

Како отклонити грешке у Kotlin/Native коду на iOS-у?

За отклањање грешака користи се Xcode са повезаним Kotlin/Native фрејмворком. Тачке прекида у Kotlin коду раде при покретању на iOS симулатору. За уређај је потребна Debug изградња и Apple развојни профил.

Резиме

  • Kotlin/Native — компајлер Kotlin у изворни код, основа Kotlin Multiplatform Mobile.
  • LLVM бекенд обезбеђује генерисање машинског кода за 13 циљних платформи, укључујући iOS, Android NDK, macOS и Windows.
  • Memory Manager са бројањем референци ради без заустављања нити, што је критично за мобилне платформе.
  • iOS фрејмворк се генерише аутоматски и повезује са Xcode пројектом кроз embedAndSignAppleFrameworkForXcode.
  • Objective-C и Swift Interop обезбеђују двосмерну интеграцију са изворним iOS кодом кроз cinterop и @ObjCName.
  • Перформансе времена покретања Kotlin/Native су значајно веће од JVM верзије — до 0.003 секунде уместо 0.5–1 секунде.
  • Користите Kotlin/Native за iOS, уграђене системе и WebAssembly где JVM није доступна или није пожељна.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође