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 (نمایش میانی)
بهینه‌سازی~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 از طریق کتابخانه SKIE در Combine publishers قرار می‌گیرند. برای کار با فریم‌ورک‌های 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 از طریق لفافه‌های Kotlin به توابع iOS دسترسی فراهم می‌کند. به عنوان مثال، دریافت 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

// ساخت فریم‌ورک universal x86_64 + arm64
./gradlew :shared:linkReleaseFrameworkIosX64 \
    :shared:linkReleaseFrameworkIosArm64

// ایجاد XCFramework برای App Store
./gradlew :shared:assembleReleaseXCFramework

Kotlin/Native در مقابل 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 میلی‌ثانیه~500–1000 میلی‌ثانیه
اکوسیستممحدود (Kotlin + Interop)کامل (Kotlin + Java + Android SDK)
اندازه باینری~1–5 مگابایت (با زمان اجرا)~100–500 کیلوبایت (JAR)

انتخاب بین Kotlin/Native و Kotlin/JVM به پلتفرم هدف بستگی دارد. اگر پروژه بر iOS متمرکز است یا نیاز به مصرف حداقل منابع دارد، Kotlin/Native تنها گزینه است. برای توسعه Android، Kotlin/JVM استاندارد باقی می‌ماند، اگرچه Kotlin/Native برای مؤلفه‌های NDK که نیاز به عملکرد بومی دارند استفاده می‌شود. در پروژه‌های چندپلتفرمی، 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 فقط سازماندهی کد چندپلتفرمی را ساده‌تر می‌کند.

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 به طور خودکار تولید و از طریق embedAndSignAppleFrameworkForXcode به پروژه Xcode متصل می‌شود.
  • Objective-C و Swift Interop ادغام دوطرفه با کد بومی iOS را از طریق cinterop و @ObjCName فراهم می‌کند.
  • عملکرد زمان راه‌اندازی Kotlin/Native به طور قابل توجهی بالاتر از نسخه JVM است — تا 0.003 ثانیه به جای 0.5–1 ثانیه.
  • از Kotlin/Native برای iOS، سیستم‌های جاسازی‌شده و WebAssembly در جایی که JVM در دسترس نیست یا مطلوب نیست استفاده کنید.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید