Kotlin/Native — nedir, yerel kod derleyicisi ve özellikleri

Yazar: IT Sectr Yayınlanma: 2026-06-05 Okuma süresi: 8 dk

Kotlin/Native, Kotlin kodunu doğrudan yerel makine koduna çeviren, sanal makine olmadan çalışan bir derleyicidir. JVM sürümünün aksine, Kotlin/Native iOS, Android NDK, macOS, Windows, Linux ve WebAssembly için yürütülebilir dosyalar oluşturmak üzere LLVM arka ucu kullanır. Teknoloji, Kotlin Multiplatform'un temelidir ve JVM'nin bulunmadığı platformlarda paylaşılan kod yürütmeyi sağlar. JetBrains, 2025'e göre Kotlin/Native, 13 hedef platformu destekler ve KMM projelerinde kodun %90'ına kadar yeniden kullanıma izin verir.

Önemli Noktalar

  • Kotlin/Native, JVM kullanmadan Kotlin kodunu yerel makine koduna çeviren bir derleyicidir.
  • LLVM, her hedef platform için makine kodu oluşturmaktan sorumlu derleyici arka ucudur.
  • KMM — Kotlin Multiplatform Mobile, iOS cihazlarda paylaşılan kodu yürütmek için Kotlin/Native kullanır.
  • Memory Manager, iş parçacıklarını durdurmadan referans sayımına dayalı otomatik bir çöp toplayıcıdır.
  • Interop, yerel Objective-C, Swift ve C kütüphaneleriyle çift yönlü etkileşim mekanizmasıdır.

Kotlin/Native nedir?

Kotlin/Native, JetBrains tarafından geliştirilen, Kotlin kodunu yerel makine koduna derleme teknolojisidir. Kotlin/JVM'den temel farkı, sanal makine gerektirmemesidir — ortaya çıkan yürütülebilir dosya yalnızca makine kodu ve minimum bir çalışma zamanı içerir. Bu, Kotlin uygulamalarının iPhone, Apple Watch ve gömülü sistemler dahil olmak üzere JVM'nin desteklenmediği cihaz ve sistemlerde çalıştırılmasını sağlar.

Kotlin/Native'in tarihi, 2017'de Kotlin'in ana dalına entegre edilen deneysel bir derleyici projesiyle başladı. 2019'da KotlinConf'da hedef platform olarak iOS desteği duyuruldu ve bu, mobil geliştirme için bir dönüm noktası oldu. Kotlin 1.9.20'den itibaren Kotlin/Native derleyicisi istikrara kavuştu ve varsayılan olarak Kotlin Multiplatform'a dahil edildi.

Kotlin/Native'in temel özelliği, her platform için ayrı ayrı makine koduna derlenen ortak bir ara temsil IR kullanmasıdır. Bu, tüm Kotlin arka uçları (JVM, JS ve Native) için birleşik bir derleme ön ucu sağlar.

Kotlin/Native derleyicisi nasıl çalışır

Kotlin/Native'te derleme birkaç dönüşüm aşamasından geçer. Kotlin kaynak kodu önce dahili bir temsile dönüştürülür, ardından optimize edilir ve makine kodu oluşturma için LLVM arka ucuna gönderilir. Son aşama, çalışma zamanı kütüphaneleriyle bağlantı kurma ve yürütülebilir bir dosya veya dinamik kütüphane oluşturmadır.

Mimari üç temel bileşen içerir: ön uç (ayrıştırma ve tür denetimi), IR oluşturucu (ara temsil oluşturma) ve LLVM arka ucu (makine kodu oluşturma). Bu şema, C++ ve Rust için Clang derleyicilerinde kullanılan yaklaşıma benzer.

kotlin
// Komut satırıyla Kotlin/Native derlemesi
kotlinc-native hello.kt -o hello -opt

// Kotlin Multiplatform ile iOS arm64 için derleme
./gradlew :shared:linkDebugFrameworkIosArm64

Bellek yönetimi için Kotlin/Native, döngü dedektörlü referans sayımına dayalı kendi Memory Manager'ını kullanır. Kotlin 1.7.20'den itibaren yeni bellek yöneticisi varsayılan olarak çalışır ve @ThreadLocal veya @SharedImmutable ek açıklamaları gerektirmez. Çöp toplayıcı, iş parçacıklarını durdurmadan çalışır; bu, ana iş parçacığının uzun süreli bloke edilmesi sırasında sistemin uygulamayı zorla sonlandırabileceği iOS için kritiktir.

Kotlin/Native derleme aşamaları

Derleme süreci beş aşamaya ayrılır: ayrıştırma (kaynak kodu analizi), anlamsal analiz (tür denetimi ve ad çözümleme), IR oluşturma (ara temsil oluşturma), optimizasyon (basitleştirme ve ölü kod kaldırma) ve LLVM ile kod oluşturma. Her aşama farklı modüller için paralel olarak yürütülebilir, bu da büyük projelerin derlemesini hızlandırır.

AşamaSüreSonuç
Ayrıştırma~%10 süreKaynak kodun AST ağacı
Anlamsal analiz~%20 süreTiplendirilmiş AST
IR oluşturma~%15 süreKotlin IR (Ara Temsil)
Optimizasyon~%25 süreOptimize edilmiş IR
LLVM kod oluşturma~%30 süreMakine kodu + yürütülebilir dosya

Desteklenen Kotlin/Native platformları

Kotlin/Native, kategorilere ayrılmış 13 hedef platformu destekler. Mobil geliştirme için iOS (arm64), Android (arm32, arm64, x86_64) ve watchOS mevcuttur. Masaüstü platformları macOS (x64, arm64), Windows (mingw x64) ve Linux'u (x64, arm64, arm32) içerir. Sunucu ve gömülü geliştirme için WebAssembly ve İşletim Sistemi olmadan LLVM üzerinde Kotlin/Native (bağımsız) mevcuttur. Her platform, çıktı olarak ayrı bir framework veya kütüphane gerektirir.

Mobil geliştirme platformları

iOS için Kotlin/Native, bir Xcode projesine bağlanabilen evrensel bir framework (.framework) oluşturur. Android NDK için JNI aracılığıyla çağrılabilen yerel .so kütüphaneleri oluşturulur. watchOS Kotlin 1.6.0'dan, tvOS ise 1.7.0 sürümünden itibaren desteklenmektedir. Her mimari ayrı bir derleme gerektirir, ancak Kotlin Multiplatform bu süreci Gradle eklentisi aracılığıyla otomatikleştirir.

Masaüstü ve sunucu platformları

macOS ve Linux, Compose Multiplatform framework'ünü kullanarak Kotlin'de yerel masaüstü uygulamaları geliştirmek için kullanılır. Windows (MinGW), Kotlin 1.3.70'ten itibaren desteklenmektedir ve JVM kurmadan Windows uygulamaları oluşturmayı sağlar. Sunucu geliştirme için Kotlin/Native, JVM'nin bulunmadığı ortamlarda (scratch veya Alpine tabanlı minimum görüntüye sahip Docker konteynerleri gibi) kullanılabilir.

KategoriPlatformMimari
MobiliOSarm64, simülatör (x64, arm64)
MobilAndroid NDKarm32, arm64, x86, x86_64
GiyilebilirwatchOSarm64, simülatör (x64)
MasaüstümacOSx64, arm64
MasaüstüWindowsmingw x64
MasaüstüLinuxx64, arm64, arm32

iOS geliştirme için Kotlin/Native

iOS, KMM bağlamında Kotlin/Native'in birincil hedef platformudur. Derleyici, tüm paylaşılan kodu içeren bir iOS framework'ü oluşturur ve bu daha sonra bir Xcode projesine bağlanır. Framework, hem statik hem de dinamik bağlamayı destekler. Kotlin/Native, Kotlin sınıfları ve işlevleri için Objective-C sarmalayıcıları oluşturarak Swift ve Objective-C koduyla doğrudan entegrasyon sağlar.

iOS ile entegrasyon, oluşturulan framework'ü bağlamak için Xcode'un yapılandırılmasını gerektirir. Kotlin Multiplatform, Xcode Build Phases'tan çağrılan embedAndSignAppleFrameworkForXcode görevini kullanarak bu süreci otomatikleştirir. Hata ayıklama için Kotlin/Native, uygulama iOS simülatöründe çalıştırılırken paylaşılan modül kodunda kesme noktalarını destekler.

kotlin
// iOS framework'üne derlenmiş 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"
    }
}

Objective-C ve Swift Interop

iOS koduyla Interop her iki yönde de çalışır. Kotlin/Native, Kotlin sınıfları için Objective-C başlıkları oluşturur ve bunlar otomatik olarak Swift'ten erişilebilir hale gelir. Ters iletişim, belirtilen bir Objective-C adı altında Kotlin işlevlerini dışa aktarmak için @ObjCName ek açıklaması kullanılarak sağlanır. Kotlin koleksiyonları otomatik olarak NSArray ve NSDictionary'ye dönüştürülür ve Kotlin coroutine'leri SKIE kütüphanesi aracılığıyla Combine yayıncılarına sarılır. Kotlin'den iOS framework'leriyle çalışmak için, Objective-C başlıklarına Kotlin bağlamaları oluşturan bir araç olan cinterop kullanılır.

Kod örnekleri: kurulum ve derleme

Kotlin/Native ile başlamak için, Kotlin Multiplatform eklentisi ve hedef platformlarla build.gradle.kts'nin yapılandırılması gerekir. iOS ve Android desteği olan bir KMM projesi için minimum yapılandırmaya bakalım.

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

Derleme yapılandırmasından sonra, platforma özgü kod eklenebilir. Kotlin/Native, Kotlin sarmalayıcıları aracılığıyla iOS işlevlerine erişim sağlar. Örneğin, iOS'ta cihaz UUID'si almak için Foundation'dan NSUUID'nin çağrılması gerekir.

kotlin
import platform.Foundation.NSUUID

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

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

iOS framework'ü oluşturma

Bir iOS framework'ü oluşturmak için Gradle görevi linkDebugFrameworkIosArm64 veya üretim için linkReleaseFrameworkIosArm64 kullanılır. Derlemeden sonra framework, build/bin/iosArm64/debugFramework/ içinde bulunur. Bir Xcode projesine bağlantı, Pods Podfile aracılığıyla veya framework'ün General → Frameworks, Libraries and Embedded Content'e eklenmesiyle yapılır.

kotlin
// iOS arm64 için sürüm framework'ü derle
./gradlew :shared:linkReleaseFrameworkIosArm64

// Evrensel framework x86_64 + arm64 derle
./gradlew :shared:linkReleaseFrameworkIosX64 \
    :shared:linkReleaseFrameworkIosArm64

// App Store için XCFramework oluştur
./gradlew :shared:assembleReleaseXCFramework

Kotlin/Native vs Kotlin/JVM: karşılaştırma

Kotlin/Native ve Kotlin/JVM, mimari, performans ve uygulama kapsamı açısından farklılık gösterir. Kotlin/JVM, kodu JVM'de yürütülen bayt koduna derleyerek geniş Java kütüphane ekosistemine erişim sağlar, ancak yüklü bir sanal makine gerektirir. Kotlin/Native, harici bağımlılıklar olmadan yürütülebilir bir dosya oluşturur, ancak daha sınırlı bir kütüphane ekosistemiyle.

Başlangıç süresi performansı, JVM yüklemesi gerektirmediği için Kotlin/Native'te daha yüksektir. JetBrains kıyaslamalarına göre, Kotlin/Native'te bir Hello World uygulaması 0,003 saniyede başlarken, Kotlin/JVM sanal makineyi yüklemek için 0,5–1 saniye gerektirir. Ancak, Kotlin/Native'in yürütülebilir dosya boyutu, dahil edilen çalışma zamanı nedeniyle 2–3 kat daha büyük olabilir.

ÖzellikKotlin/NativeKotlin/JVM
Hedef platformlariOS, macOS, Windows, Linux, WebAssembly, gömülüSunucular, Android, masaüstü (JVM)
BağımlılıklarÇalışma zamanı yok (kendi kendine yeter)JVM gerekli (JDK/JRE)
Başlangıç süresi~3 ms~500–1000 ms
EkosistemSınırlı (Kotlin + Interop)Tam (Kotlin + Java + Android SDK)
İkili dosya boyutu~1–5 MB (çalışma zamanı ile)~100–500 KB (JAR)

Kotlin/Native ve Kotlin/JVM arasındaki seçim, hedef platforma bağlıdır. Proje iOS'u hedefliyorsa veya minimum kaynak tüketimi gerekiyorsa, Kotlin/Native tek seçenektir. Android geliştirme için Kotlin/JVM standart olmaya devam eder, ancak Kotlin/Native, yerel performansın gerekli olduğu NDK bileşenleri için kullanılır. Çoklu platform projelerinde Kotlin Multiplatform, her iki yaklaşımı birleştirir: paylaşılan kod iOS için Kotlin/Native ve Android için Kotlin/JVM aracılığıyla derlenir.

Sıkça Sorulan Sorular

Kotlin/Native, Kotlin/JVM'den nasıl farklıdır?

Kotlin/Native kodu sanal makine olmadan yerel makine koduna derlerken, Kotlin/JVM yüklü bir JVM gerektiren bayt koduna derler. Kotlin/Native iOS, gömülü sistemler ve WebAssembly için kullanılırken, Kotlin/JVM Android ve sunucular için kullanılır.

Kotlin/Native KMM olmadan kullanılabilir mi?

Evet, Kotlin/Native, desteklenen herhangi bir platform için konsol uygulamaları, yerel eklentiler veya kütüphaneler oluşturmak için bağımsız bir derleyici olarak kullanılabilir. KMM yalnızca çoklu platform kodunun organizasyonunu basitleştirir.

Kotlin/Native iOS'ta belleği nasıl yönetir?

Kotlin/Native'in Memory Manager'ı, otomatik döngü dedektörüyle referans sayımı kullanır. Kotlin 1.7.20'den itibaren çöp toplayıcı, @ThreadLocal ek açıklamaları gerektirmez ve iOS ana iş parçacığını durdurmadan çalışır.

Kotlin/Native'den hangi iOS kütüphanelerine erişilebilir?

cinterop aracılığıyla tüm iOS framework'lerine erişilebilir: Foundation, UIKit, CoreData, CoreBluetooth, MapKit ve yüzlercesi. JetBrains, Kotlin/Native'in bir parçası olarak standart iOS kütüphaneleri için hazır bağlamalar sağlar.

iOS'ta Kotlin/Native kodu nasıl hata ayıklanır?

Hata ayıklama, bağlı Kotlin/Native framework'ü ile Xcode kullanılarak yapılır. Kotlin kodundaki kesme noktaları iOS simülatöründe çalıştırıldığında çalışır. Bir cihaz için Debug derlemesi ve Apple geliştirici profili gereklidir.

Özet

  • Kotlin/Native, Kotlin'den yerel koda derleyici, Kotlin Multiplatform Mobile'in temelidir.
  • LLVM arka ucu, iOS, Android NDK, macOS ve Windows dahil 13 hedef platform için makine kodu oluşturma sağlar.
  • Memory Manager, referans sayımıyla iş parçacıklarını durdurmadan çalışır, mobil platformlar için kritiktir.
  • iOS framework'ü otomatik olarak oluşturulur ve embedAndSignAppleFrameworkForXcode aracılığıyla Xcode projesine bağlanır.
  • Objective-C ve Swift Interop, cinterop ve @ObjCName aracılığıyla yerel iOS koduyla çift yönlü entegrasyon sağlar.
  • Başlangıç performansı Kotlin/Native'te JVM sürümünden önemli ölçüde daha yüksektir — 0,5–1 saniye yerine 0,003 saniyeye kadar.
  • JVM'nin bulunmadığı veya istenmediği iOS, gömülü sistemler ve WebAssembly için Kotlin/Native kullanın.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun