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 كمشروع — مترجم تجريبي تم دمجه في الفرع الرئيسي لـ Kotlin في عام 2017. في عام 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 (Intermediate Representation)
التحسين~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

التفاعل مع كود iOS يعمل في كلا الاتجاهين. يولد Kotlin/Native رؤوس Objective-C لفئات Kotlin، التي تصبح متاحة تلقائيًا من Swift. يتم توفير الاتصال العكسي باستخدام التعليق @ObjCName لتصدير وظائف Kotlin تحت اسم Objective-C محدد. يتم تحويل مجموعات Kotlin تلقائيًا إلى NSArray وNSDictionary، ويتم تغليف coroutines الخاصة بـ Kotlin في ناشري Combine عبر مكتبة SKIE. للعمل مع أطر عمل 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 الوصول إلى وظائف iOS من خلال أغلفة Kotlin. على سبيل المثال، الحصول على 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

// بناء إطار عمل شامل x86_64 + arm64
./gradlew :shared:linkReleaseFrameworkIosX64 \
    :shared:linkReleaseFrameworkIosArm64

// إنشاء XCFramework لمتجر التطبيقات
./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, مضمنخوادم، 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 يُنشأ تلقائيًا ويتصل بمشروع Xcode عبر embedAndSignAppleFrameworkForXcode.
  • التفاعل مع Objective-C وSwift يوفر تكاملًا ثنائي الاتجاه مع كود iOS الأصلي عبر cinterop و@ObjCName.
  • أداء بدء التشغيل لـ Kotlin/Native أعلى بكثير من إصدار JVM — حتى 0.003 ثانية بدلاً من 0.5–1 ثانية.
  • استخدم Kotlin/Native لـ iOS والأنظمة المضمنة وWebAssembly حيث JVM غير متوفرة أو غير مرغوب فيها.

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا