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 سمیلیٹر پر ایپلیکیشن چلاتے وقت مشترکہ ماڈیول کوڈ میں بریک پوائنٹس کو سپورٹ کرتا ہے۔
// iOS فریم ورک میں مرتب کردہ Kotlin کوڈ
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 کا استعمال کرتے ہوئے کی جاتی ہے۔ Kotlin کوڈ میں بریک پوائنٹس iOS سمیلیٹر پر چلاتے وقت کام کرتے ہیں۔ ڈیوائس کے لیے، ڈیبگ بلڈ اور Apple ڈویلپر پروفائل درکار ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں