Kotlin/Native एक कंपाइलर है जो Kotlin कोड को सीधे नेटिव मशीन कोड में अनुवादित करता है, बिना वर्चुअल मशीन के काम करता है। JVM संस्करण के विपरीत, Kotlin/Native iOS, Android NDK, macOS, Windows, Linux और WebAssembly के लिए निष्पादन योग्य फ़ाइलें उत्पन्न करने के लिए LLVM बैकएंड का उपयोग करता है। यह तकनीक Kotlin Multiplatform की नींव है और उन प्लेटफ़ॉर्म पर साझा कोड निष्पादन को सक्षम बनाती है जहाँ JVM उपलब्ध नहीं है। JetBrains, 2025 के अनुसार, Kotlin/Native 13 लक्ष्य प्लेटफ़ॉर्म का समर्थन करता है और KMM परियोजनाओं में 90% तक कोड के पुन: उपयोग की अनुमति देता है।
मुख्य बिंदु
Kotlin/Native JetBrains द्वारा विकसित Kotlin कोड को नेटिव मशीन कोड में संकलित करने की एक तकनीक है। 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 बैकएंड (मशीन कोड उत्पादन)। यह योजना C++ और Rust के लिए Clang कंपाइलरों में उपयोग किए जाने वाले दृष्टिकोण के समान है।
// कमांड लाइन के माध्यम से Kotlin/Native संकलन
kotlinc-native hello.kt -o hello -opt
// Kotlin Multiplatform के माध्यम से iOS arm64 के लिए बिल्ड
./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 और बिना OS के LLVM पर Kotlin/Native (स्टैंडअलोन) उपलब्ध हैं। प्रत्येक प्लेटफ़ॉर्म को आउटपुट के रूप में एक अलग फ्रेमवर्क या लाइब्रेरी की आवश्यकता होती है।
iOS के लिए, Kotlin/Native एक यूनिवर्सल फ्रेमवर्क (.framework) उत्पन्न करता है जिसे Xcode प्रोजेक्ट से जोड़ा जा सकता है। Android NDK के लिए, नेटिव .so लाइब्रेरीज़ बनाई जाती हैं जिन्हें JNI के माध्यम से कॉल किया जा सकता है। watchOS Kotlin 1.6.0 से समर्थित है, और tvOS संस्करण 1.7.0 से। प्रत्येक आर्किटेक्चर को अलग बिल्ड की आवश्यकता होती है, लेकिन Kotlin Multiplatform Gradle प्लगइन के माध्यम से इस प्रक्रिया को स्वचालित करता है।
macOS और Linux का उपयोग Compose Multiplatform फ्रेमवर्क का उपयोग करके Kotlin में नेटिव डेस्कटॉप एप्लिकेशन विकसित करने के लिए किया जाता है। Windows (MinGW) Kotlin 1.3.70 से समर्थित है और JVM स्थापित किए बिना Windows एप्लिकेशन बनाने की अनुमति देता है। सर्वर डेवलपमेंट के लिए, Kotlin/Native का उपयोग उन वातावरणों में किया जा सकता है जहाँ JVM उपलब्ध नहीं है, जैसे scratch या Alpine पर आधारित न्यूनतम छवि वाले Docker कंटेनर।
| श्रेणी | प्लेटफ़ॉर्म | आर्किटेक्चर |
|---|---|---|
| मोबाइल | 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 KMM के संदर्भ में Kotlin/Native का प्राथमिक लक्ष्य प्लेटफ़ॉर्म है। कंपाइलर एक iOS फ्रेमवर्क बनाता है जिसमें सभी साझा कोड होते हैं, जो फिर Xcode प्रोजेक्ट से जुड़ता है। फ्रेमवर्क स्थिर और गतिशील दोनों लिंकिंग का समर्थन करता है। Kotlin/Native Kotlin क्लासेस और फ़ंक्शन के लिए Objective-C रैपर उत्पन्न करता है, जो 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"
}
}
iOS कोड के साथ Interop दोनों दिशाओं में काम करता है। Kotlin/Native Kotlin क्लासेस के लिए Objective-C हेडर उत्पन्न करता है, जो स्वचालित रूप से Swift से सुलभ हो जाते हैं। रिवर्स संचार निर्दिष्ट Objective-C नाम के तहत Kotlin फ़ंक्शन निर्यात करने के लिए @ObjCName एनोटेशन का उपयोग करके प्रदान किया जाता है। Kotlin संग्रह स्वचालित रूप से NSArray और NSDictionary में परिवर्तित होते हैं, और Kotlin कोरूटीन SKIE लाइब्रेरी के माध्यम से Combine पब्लिशर्स में लपेटे जाते हैं। Kotlin से iOS फ्रेमवर्क के साथ काम करने के लिए, cinterop का उपयोग किया जाता है — Objective-C हेडर के लिए Kotlin बाइंडिंग उत्पन्न करने का एक उपकरण।
Kotlin/Native के साथ शुरुआत करने के लिए, Kotlin Multiplatform प्लगइन और लक्ष्य प्लेटफ़ॉर्म के साथ build.gradle.kts को कॉन्फ़िगर करना आवश्यक है। आइए iOS और Android समर्थन वाले KMM प्रोजेक्ट के लिए न्यूनतम कॉन्फ़िगरेशन देखें।
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 फ़ंक्शन तक पहुँच प्रदान करता है। उदाहरण के लिए, iOS पर डिवाइस UUID प्राप्त करने के लिए Foundation से NSUUID को कॉल करना आवश्यक है।
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 में फ्रेमवर्क जोड़कर किया जाता है।
// iOS arm64 के लिए रिलीज़ फ्रेमवर्क बनाएँ
./gradlew :shared:linkReleaseFrameworkIosArm64
// यूनिवर्सल फ्रेमवर्क x86_64 + arm64 बनाएँ
./gradlew :shared:linkReleaseFrameworkIosX64 \
:shared:linkReleaseFrameworkIosArm64
// App Store के लिए XCFramework बनाएँ
./gradlew :shared:assembleReleaseXCFramework
Kotlin/Native और Kotlin/JVM आर्किटेक्चर, प्रदर्शन और अनुप्रयोग के दायरे में भिन्न हैं। Kotlin/JVM कोड को JVM पर निष्पादित बाइटकोड में संकलित करता है, जो Java लाइब्रेरीज़ के विशाल पारिस्थितिकी तंत्र तक पहुँच प्रदान करता है, लेकिन स्थापित वर्चुअल मशीन की आवश्यकता होती है। Kotlin/Native बिना बाहरी निर्भरता के एक निष्पादन योग्य फ़ाइल उत्पन्न करता है, लेकिन अधिक सीमित लाइब्रेरी पारिस्थितिकी तंत्र के साथ।
स्टार्टअप समय प्रदर्शन Kotlin/Native में अधिक है क्योंकि JVM लोडिंग की आवश्यकता नहीं है। JetBrains बेंचमार्क के अनुसार, Kotlin/Native पर Hello World एप्लिकेशन 0.003 सेकंड में शुरू होता है, जबकि Kotlin/JVM को वर्चुअल मशीन लोड करने में 0.5–1 सेकंड की आवश्यकता होती है। हालाँकि, शामिल रनटाइम के कारण Kotlin/Native की निष्पादन योग्य फ़ाइल का आकार 2–3 गुना बड़ा हो सकता है।
| विशेषता | Kotlin/Native | Kotlin/JVM |
|---|---|---|
| लक्ष्य प्लेटफ़ॉर्म | iOS, macOS, Windows, Linux, WebAssembly, एम्बेडेड | सर्वर, Android, डेस्कटॉप (JVM) |
| निर्भरताएँ | कोई रनटाइम नहीं (स्व-निहित) | JVM आवश्यक (JDK/JRE) |
| स्टार्टअप समय | ~3 मिलीसेकंड | ~500–1000 मिलीसेकंड |
| पारिस्थितिकी तंत्र | सीमित (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 घटकों के लिए किया जाता है जहाँ नेटिव प्रदर्शन की आवश्यकता होती है। मल्टीप्लेटफ़ॉर्म परियोजनाओं में, Kotlin Multiplatform दोनों दृष्टिकोणों को जोड़ता है: साझा कोड iOS के लिए Kotlin/Native और Android के लिए Kotlin/JVM के माध्यम से संकलित होता है।
अक्सर पूछे जाने वाले प्रश्न
Kotlin/Native कोड को बिना वर्चुअल मशीन के नेटिव मशीन कोड में संकलित करता है, जबकि Kotlin/JVM बाइटकोड में संकलित करता है जिसके लिए स्थापित JVM की आवश्यकता होती है। Kotlin/Native का उपयोग iOS, एम्बेडेड सिस्टम और WebAssembly के लिए किया जाता है, जबकि Kotlin/JVM का उपयोग Android और सर्वर के लिए किया जाता है।
हाँ, Kotlin/Native का उपयोग किसी भी समर्थित प्लेटफ़ॉर्म के लिए कंसोल एप्लिकेशन, नेटिव प्लगइन या लाइब्रेरी बनाने के लिए एक स्वतंत्र कंपाइलर के रूप में किया जा सकता है। KMM केवल मल्टीप्लेटफ़ॉर्म कोड के संगठन को सरल बनाता है।
Kotlin/Native का Memory Manager स्वचालित चक्र डिटेक्टर के साथ संदर्भ गणना का उपयोग करता है। Kotlin 1.7.20 से, कचरा संग्राहक को @ThreadLocal एनोटेशन की आवश्यकता नहीं है और यह iOS के मुख्य थ्रेड को रोके बिना काम करता है।
cinterop के माध्यम से, सभी iOS फ्रेमवर्क सुलभ हैं: Foundation, UIKit, CoreData, CoreBluetooth, MapKit और सैकड़ों अन्य। JetBrains Kotlin/Native के भाग के रूप में मानक iOS लाइब्रेरीज़ के लिए तैयार बाइंडिंग प्रदान करता है।
डिबगिंग कनेक्टेड Kotlin/Native फ्रेमवर्क के साथ Xcode का उपयोग करके की जाती है। iOS सिम्युलेटर पर चलाते समय Kotlin कोड में ब्रेकपॉइंट काम करते हैं। डिवाइस के लिए, Debug बिल्ड और Apple डेवलपर प्रोफ़ाइल की आवश्यकता होती है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें