Kotlin/Native
ما هي تقنية Kotlin/Native؟
تُعدُّ Kotlin/Native تقنيةً لترجمة شيفرة Kotlin إلى الصيغة الثنائيّة الأساسيّة (native binaries) التي لا تتطلَّب آلةً افتراضيّة (Virtual Machine) لتشغيلها، وتشمل كلًا من معالجات خلفيّة (backend) معتمدةً على تقنيات مكتبة LLVM للمترجم (compiler) وتعريف استخدام أساسيّ (native implementation) من مكتبة التشغيل (runtime) في Kotlin، وقد صُمّمت بالأصل للسماح بالترجمة لمنصّات العمل التي تكون فيها الآلات الافتراضيّة غير متاحةٍ أو مرغوبةٍ (مثل أنظمة iOs والأهداف المدمجة (embedded targets)) أو عندما يحتاج المطوّر لكتابة برنامجٍ مستقلّ وبحجمٍ مقبولٍ دون أن ينتج عن ذلك زمن تشغيلٍ إضافيّ.
وتدعم تقنية Kotlin/Native توافقية التبديل (interoperability) مع الشيفرة الأساسيّة (native code)، كما أن هناك مكتبات متاحة مُوافقةٍ لمكتبات منصّات العمل (platforms)، أما بالنسبة للمكتبات الأخرى فهناك أداة لتوليد مكتبةٍ تبديليّةٍ (introp) من ترويسة ملف C متضمّنةً الدعم الكامل لكلّ مزايا لغة البرمجة C، كما وتدعم توافقية التبديل (interoperability) مع شيفرات Objective/C في أنظمة macOS و iOS.
ولا تزال Kotlin/Native قيد التطوير إذ إنّ بعض الإصدارات التجريبيّة منها متاحة، ويتوفَّر دعم بيئة العمل (IDE) لها من خلال إضافةٍ (plugin) عبر CLion.
المنصات المستهدفة
تدعم Kotlin/Native حاليًا المنصّات الآتية:
- Windows (فقط بالإصدار x86_64 )
- Linux ( بالتوزيعات: x86_64 و arm32 و MIPS و MIPS little endian )
- MacOS (فقط بالإصدار x86_64 )
- iOS (فقط بالإصدار arm64)
- Android (كلًا من إصداري arm32 و arm64)
- WebAssembly (فقط بالإصدار wasm32 )
بعض المشاريع النموذجيّة
تستعرِض عيّنات المشاريع الآتية عددًا من الإمكانات المتاحة في Kotlin/Native:
- مركز تخزين Kotlin/Native GitHub والذي يحتوي على عدّة مشاريع نموذجية.
- تطبيق KotlinConf Spinner وهو عبارة عن لعبة متعددة المنصات (cross-platform) وبعدّة لاعبين مبنيّة بشكلٍ كاملٍ بتقنية Kotlin/Native وتتألف من:
- معالجات خلفيّة (backend) بالاعتماد على SQLite لتخزين البيانات وعلى واجهات REST/JSON.
- عملاء (clients) لأنظمة iOS و Android باستخدام OpenGL.
- واجهات أماميّة (frontend) من خلال مستعرضٍ يعتمد على WebAssembly لعرض نتائج اللعبة.
- تطبيق KotlinConf والذي هو تطبيق iOS بواجهات مستخدمٍ معتمدةً على UIKit وهي بهذا تعرض إمكانيّات توافقيّة التبديل إلى Objective/C في Kotlin/Native.