Kotlin/Native — co to je, překladač do nativního kódu a vlastnosti

Autor: IT Sectr Publikováno: 2026-06-05 Doba čtení: 8 min

Kotlin/Native — je překladač kódu Kotlin přímo do nativního strojového kódu, pracující bez virtuálního stroje. Na rozdíl od verze JVM používá Kotlin/Native backend LLVM pro generování spustitelných souborů pro iOS, Android NDK, macOS, Windows, Linux a WebAssembly. Tato technologie je základem Kotlin Multiplatform a zajišťuje provádění společného kódu na platformách, kde JVM není k dispozici. Podle JetBrains, 2025 podporuje Kotlin/Native 13 cílových platforem a umožňuje opětovné použití až 90% kódu v projektech KMM.

Hlavní body

  • Kotlin/Native — překladač překládající kód Kotlin do nativního strojového kódu bez použití JVM.
  • LLVM — backend překladače zodpovědný za generování strojového kódu pro každou cílovou platformu.
  • KMM — Kotlin Multiplatform Mobile používá Kotlin/Native pro provádění společného kódu na zařízeních iOS.
  • Memory Manager — automatický sběrač odpadu pracující na základě počítání referencí bez zastavování vláken.
  • Interop — mechanismus obousměrné interakce s nativními knihovnami Objective-C, Swift a C.

Co je Kotlin/Native?

Kotlin/Native — je technologie kompilace kódu Kotlin do nativního strojového kódu vyvinutá společností JetBrains. Hlavní rozdíl oproti Kotlin/JVM spočívá v absenci potřeby virtuálního stroje — výsledný spustitelný soubor obsahuje pouze strojový kód a minimální běhové prostředí. To umožňuje spouštět aplikace Kotlin na zařízeních a systémech, kde JVM není podporována, včetně iPhone, Apple Watch a vestavěných systémů.

Historie Kotlin/Native začala jako experimentální překladač, který byl v roce 2017 integrován do hlavní větve Kotlin. V roce 2019 byla na KotlinConf oznámena podpora iOS jako cílové platformy, což se stalo zlomovým bodem pro mobilní vývoj. Od verze Kotlin 1.9.20 dosáhl překladač Kotlin/Native stability a je ve výchozím nastavení součástí Kotlin Multiplatform.

Klíčovou vlastností Kotlin/Native je použití společné mezilehlé reprezentace IR, která je kompilována do strojového kódu pro každou platformu zvlášť. To zajišťuje jednotné frontend kompilace pro všechny backendy Kotlin: JVM, JS a Native.

Jak funguje překladač Kotlin/Native

Kompilace Kotlin/Native prochází několika fázemi transformace. Zdrojový kód v Kotlin je nejprve převeden do interní reprezentace, poté optimalizován a předán backendu LLVM pro generování strojového kódu. Poslední fází je propojení s běhovými knihovnami a vytvoření spustitelného souboru nebo dynamické knihovny.

Architektura zahrnuje tři klíčové komponenty: frontend (parsování a kontrola typů), generátor IR (vytváření mezilehlé reprezentace) a backend LLVM (generování strojového kódu). Toto schéma je podobné přístupu používanému v překladačích Clang pro C++ a Rust.

kotlin
// Kompilace Kotlin/Native přes příkazový řádek
kotlinc-native hello.kt -o hello -opt

// Sestavení pro iOS arm64 přes Kotlin Multiplatform
./gradlew :shared:linkDebugFrameworkIosArm64

Pro správu paměti používá Kotlin/Native vlastní Memory Manager založený na počítání referencí s cyklickým detektorem. Od Kotlin 1.7.20 funguje nový správce paměti ve výchozím nastavení a nevyžaduje anotace @ThreadLocal nebo @SharedImmutable. Sběrač odpadu pracuje bez zastavování vláken, což je kritické pro iOS, kde systém může při dlouhodobém blokování hlavního vlákna aplikaci násilně ukončit.

Fáze kompilace Kotlin/Native

Proces kompilace je rozdělen do pěti fází: parsování (analýza zdrojového kódu), sémantická analýza (kontrola typů a rozlišení názvů), generování IR (vytváření mezilehlé reprezentace), optimalizace (zjednodušení a odstranění mrtvého kódu) a generování kódu prostřednictvím LLVM. Každá fáze může být prováděna paralelně pro různé moduly, což urychluje sestavování velkých projektů.

FázeDoba trváníVýsledek
Parsování~10% časuAST strom zdrojového kódu
Sémantická analýza~20% časuTypizované AST
Generování IR~15% časuKotlin IR (Intermediate Representation)
Optimalizace~25% časuOptimalizované IR
Generování kódu LLVM~30% časuStrojový kód + spustitelný soubor

Podporované platformy Kotlin/Native

Kotlin/Native podporuje 13 cílových platforem rozdělených do kategorií. Pro mobilní vývoj jsou k dispozici iOS (arm64), Android (arm32, arm64, x86_64) a watchOS. Desktopové platformy zahrnují macOS (x64, arm64), Windows (mingw x64) a Linux (x64, arm64, arm32). Pro serverový a vestavěný vývoj jsou k dispozici WebAssembly a Kotlin/Native na LLVM bez operačního systému (standalone). Každá platforma vyžaduje samostatný framework nebo knihovnu na výstupu.

Platformy pro mobilní vývoj

Pro iOS Kotlin/Native generuje univerzální framework (.framework), který lze připojit k projektu Xcode. Pro Android NDK jsou vytvářeny nativní knihovny .so, které lze volat přes JNI. Platforma watchOS je podporována od Kotlin 1.6.0 a tvOS od verze 1.7.0. Každá architektura vyžaduje samostatné sestavení, ale Kotlin Multiplatform tento proces automatizuje pomocí pluginu Gradle.

Desktopové a serverové platformy

macOS a Linux se používají pro vývoj nativních desktopových aplikací v Kotlin pomocí frameworku Compose Multiplatform. Platforma Windows (MinGW) je podporována od Kotlin 1.3.70 a umožňuje vytváření aplikací pro Windows bez instalace JVM. Pro serverový vývoj lze Kotlin/Native použít v prostředích, kde JVM není k dispozici, například v Docker kontejnerech s minimálním obrazem založeným na scratch nebo Alpine.

KategoriePlatformaArchitektura
MobilníiOSarm64, simulátor (x64, arm64)
MobilníAndroid NDKarm32, arm64, x86, x86_64
NositelnéwatchOSarm64, simulátor (x64)
DesktopmacOSx64, arm64
DesktopWindowsmingw x64
DesktopLinuxx64, arm64, arm32

Kotlin/Native pro vývoj iOS

iOS je hlavní cílovou platformou Kotlin/Native v kontextu KMM. Překladač vytváří iOS framework obsahující veškerý společný kód, který je pak připojen k projektu Xcode. Framework podporuje jak statické, tak dynamické propojení. Kotlin/Native generuje Objective-C obálky pro třídy a funkce Kotlin, což zajišťuje přímou integraci s kódem v Swift a Objective-C.

Integrace s iOS vyžaduje konfiguraci Xcode pro připojení generovaného frameworku. Kotlin Multiplatform automatizuje tento proces pomocí úlohy embedAndSignAppleFrameworkForXcode, která se spouští z Xcode Build Phases. Pro ladění podporuje Kotlin/Native breakpointy v kódu společného modulu při spuštění aplikace na iOS simulátoru.

kotlin
// Kód Kotlin zkompilovaný do iOS frameworku
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 a Swift Interop

Interop s iOS kódem funguje oběma směry. Kotlin/Native generuje Objective-C hlavičky pro třídy Kotlin, které jsou automaticky dostupné ze Swiftu. Zpětnou vazbu zajišťuje anotace @ObjCName pro export funkcí Kotlin pod zadaným názvem Objective-C. Kolekce Kotlin se automaticky převádějí na NSArray a NSDictionary a korutiny Kotlin jsou zabaleny do Combine publishers prostřednictvím knihovny SKIE. Pro práci s iOS frameworky z Kotlin se používá cinterop — nástroj pro generování vazeb Kotlin na Objective-C hlavičky.

Příklady kódu: konfigurace a kompilace

Pro zahájení práce s Kotlin/Native je vyžadována konfigurace build.gradle.kts s uvedením pluginu Kotlin Multiplatform a cílových platforem. Podívejme se na minimální konfiguraci pro projekt KMM s podporou iOS a 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")
        }
    }
}

Po konfiguraci sestavení lze přidat kód závislý na platformě. Kotlin/Native poskytuje přístup k funkcím iOS prostřednictvím obálek Kotlin. Například získání UUID zařízení na iOS vyžaduje volání NSUUID z Foundation.

kotlin
import platform.Foundation.NSUUID

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

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

Sestavení iOS frameworku

Pro generování iOS frameworku se používá úloha Gradle linkDebugFrameworkIosArm64 nebo linkReleaseFrameworkIosArm64 pro produkci. Po sestavení se framework nachází v build/bin/iosArm64/debugFramework/. Připojení k projektu Xcode se provádí přes Pods Podfile nebo přidáním frameworku do sekce General → Frameworks, Libraries and Embedded Content.

kotlin
// Sestavení release frameworku pro iOS arm64
./gradlew :shared:linkReleaseFrameworkIosArm64

// Sestavení univerzálního frameworku x86_64 + arm64
./gradlew :shared:linkReleaseFrameworkIosX64 \
    :shared:linkReleaseFrameworkIosArm64

// Vytvoření XCFramework pro App Store
./gradlew :shared:assembleReleaseXCFramework

Kotlin/Native vs Kotlin/JVM: srovnání

Kotlin/Native a Kotlin/JVM se liší architekturou, výkonem a oblastí použití. Kotlin/JVM kompiluje kód do bytekódu spouštěného na JVM, což poskytuje přístup k obrovskému ekosystému knihoven Java, ale vyžaduje nainstalovaný virtuální stroj. Kotlin/Native generuje spustitelný soubor bez externích závislostí, ale s omezenějším ekosystémem knihoven.

Výkon počátečního času Kotlin/Native je vyšší, protože není vyžadováno načítání JVM. Podle benchmarků JetBrains se aplikace Hello World na Kotlin/Native spouští za 0.003 sekundy, zatímco Kotlin/JVM potřebuje 0.5–1 sekundu pro načtení virtuálního stroje. Velikost spustitelného souboru Kotlin/Native však může být 2–3krát větší kvůli zahrnutému běhovému prostředí.

CharakteristikaKotlin/NativeKotlin/JVM
Cílové platformyiOS, macOS, Windows, Linux, WebAssembly, embeddedServery, Android, desktop (JVM)
ZávislostiBez běhového prostředí (samostatný)Vyžaduje JVM (JDK/JRE)
Doba spuštění~3 ms~500–1000 ms
EkosystémOmezený (Kotlin + Interop)Plný (Kotlin + Java + Android SDK)
Velikost binárky~1–5 MB (s během)~100–500 KB (JAR)

Volba mezi Kotlin/Native a Kotlin/JVM závisí na cílové platformě. Pokud je projekt zaměřen na iOS nebo vyžaduje minimální spotřebu zdrojů, je Kotlin/Native jedinou možností. Pro vývoj Android zůstává Kotlin/JVM standardem, i když Kotlin/Native se používá pro komponenty NDK, kde je vyžadován nativní výkon. V multi-platformních projektech Kotlin Multiplatform kombinuje oba přístupy: společný kód je kompilován přes Kotlin/Native pro iOS a přes Kotlin/JVM pro Android.

Často kladené otázky

Čím se Kotlin/Native liší od Kotlin/JVM?

Kotlin/Native kompiluje kód do nativního strojového kódu bez virtuálního stroje, zatímco Kotlin/JVM do bytekódu vyžadujícího nainstalovanou JVM. Kotlin/Native se používá pro iOS, vestavěné systémy a WebAssembly, Kotlin/JVM pro Android a servery.

Lze použít Kotlin/Native bez KMM?

Ano, Kotlin/Native lze použít jako samostatný překladač pro vytváření konzolových aplikací, nativních pluginů nebo knihoven pro libovolnou podporovanou platformu. KMM pouze zjednodušuje organizaci multi-platformního kódu.

Jak Kotlin/Native spravuje paměť na iOS?

Memory Manager Kotlin/Native používá počítání referencí s automatickým cyklickým detektorem. Od Kotlin 1.7.20 sběrač odpadu nevyžaduje anotace @ThreadLocal a pracuje bez zastavování hlavního vlákna iOS.

Jaké iOS knihovny jsou dostupné z Kotlin/Native?

Prostřednictvím cinterop jsou dostupné všechny iOS frameworky: Foundation, UIKit, CoreData, CoreBluetooth, MapKit a stovky dalších. JetBrains poskytuje hotové vazby pro standardní iOS knihovny v rámci Kotlin/Native.

Jak ladit Kotlin/Native kód na iOS?

Pro ladění se používá Xcode s připojeným Kotlin/Native frameworkem. Breakpointy v kódu Kotlin fungují při spuštění na iOS simulátoru. Pro zařízení je vyžadováno sestavení Debug a Apple vývojářský profil.

Shrnutí

  • Kotlin/Native — překladač Kotlin do nativního kódu, základ Kotlin Multiplatform Mobile.
  • Backend LLVM zajišťuje generování strojového kódu pro 13 cílových platforem, včetně iOS, Android NDK, macOS a Windows.
  • Memory Manager s počítáním referencí pracuje bez zastavování vláken, což je kritické pro mobilní platformy.
  • iOS framework je generován automaticky a připojen k projektu Xcode přes embedAndSignAppleFrameworkForXcode.
  • Objective-C a Swift Interop zajišťují obousměrnou integraci s nativním iOS kódem přes cinterop a @ObjCName.
  • Výkon počátečního času Kotlin/Native je výrazně vyšší než verze JVM — až 0.003 sekundy místo 0.5–1 sekundy.
  • Používejte Kotlin/Native pro iOS, vestavěné systémy a WebAssembly tam, kde JVM není k dispozici nebo není žádoucí.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také