TinyGo: مترجم Go للأماكن الصغيرة
إذا كنت تعمل مع ميكروكنترولر وكنت من محبي Go ، قد يكون Tinygo مناسبًا لك ، منذ هذا تم تطوير مترجم Go pبالنسبة للمناطق التي تتطلب تمثيلًا مضغوطًا للرمز الناتج واستهلاكًا منخفضًا للموارد ، مثل وحدات التحكم الدقيقة للأنظمة المضمنة و WebAssembly.
TinyGo هو مترجم يهدف إلى جلب بنية Go إلى العديد من الأنظمة الأساسية المستهدفة الذي يتم تنفيذه باستخدام LLVM ، ويتم استخدام المكتبات المستخدمة في مجموعة أدوات مشروع Go الرئيسية لدعم اللغة.
على موقع Tinygo ، تم وصف ما يلي:
يمكنك تجميع برامج TinyGo وتشغيلها على أكثر من 94 لوحة متحكم مختلفة ، بما في ذلك BBC micro: bit و Arduino Uno.
يمكن لـ TinyGo أيضًا إنتاج كود WebAssembly (WASM) ذي الحجم الصغير جدًا. يمكنك إنشاء برامج لمتصفحات الويب ، وكذلك للخوادم وبيئات الحوسبة المتطورة التي تدعم مجموعة واجهات WebAssembly System Interface (WASI).
كان سبب إنشاء مشروع TinyGO هو الرغبة في استخدام لغة Go الشائعة في الأجهزة المدمجة- استنتج المطورون أنه إذا كان هناك إصدار من Python للميكروكونترولر ، فلماذا لا ننشئ نسخة مماثلة للغة Go؟
في TinyGo ، يمكن تشغيل البرنامج المترجم مباشرة على ميكروكنترولر ، لأو أنه يجعل من الممكن استخدام Go كلغة لكتابة نصوص الأتمتة. يدعم TinyGo حاليًا 94 طرازًا من وحدات التحكم الدقيقة، بما في ذلك لوحات مختلفة مثل Raspberry Pi Pico و Nordic و SiFive وغيرها.
يوفر TinyGo برامج التشغيل الخاصة للتفاعل مع الأجهزة والمستشعرات الخارجية المتصلة ، وكذلك لدعم واجهات مثل I2C و GPIO و SPI. يمكن أيضًا تجميع البرامج بتنسيق WebAssembly (wasm / wasi) ليتم تشغيلها في مستعرض وكثنائيات Linux.
الأهداف الرئيسية للمشروع:
- القدرة على استخدام مجموعة فرعية من لغة Go المألوفة على الأجهزة المدمجة. تم اختيار Go بدلاً من Rust لأنه أسهل في التعلم ، ويوفر دعمًا مستقلًا عن الخيط للتوازي القائم على الروتين ، ويوفر مكتبة قياسية واسعة النطاق.
- توليد ملفات قابلة للتنفيذ مضغوطة للغاية.
- دعم النماذج الأكثر شيوعًا للوحات الميكروكونترولر.
- القدرة على استخدام الويب وإنشاء تطبيقات WebAssembly المستقلة باستخدام WASI (WebAssembly
- System Interface) للعمل مع الملفات والمآخذ والوظائف الأخرى التي يوفرها نظام التشغيل.
- دعم CGo مع الحد الأدنى من النفقات العامة عند استدعاء وظائف لغة C.
- التوافق مع معظم الحزم القياسية والقدرة على تجميع التعليمات البرمجية العامة الحالية دون تغييرها.
- على عكس مترجم emgo الذي تم إهماله ، يحتفظ Tinygo بنموذج Go الأصلي لإدارة الذاكرة من خلال مجمع القمامة ويستخدم LLVM بدلاً من التحويل البرمجي إلى تمثيل C لإنشاء كود أصلي فعال.
الجدير بالذكر أن Tinygo تلقت مؤخرًا إصدارًا جديدًا وهو 0.28 وفي هذا الإصدار الجديد يبرز أن دعم الانعكاس قد تم تحسينه بشكل كبير ويقدم تطبيقه الخاص لمكتبة الانعكاس ، مما جعل من الممكن تحقيق التوافق مع العديد من المكتبات القياسية الحزم التي بها مشاكل من قبل.
بالإضافة إلى ذلك ، يضيف الإصدار الجديد دعمًا لتوجيه "// go: wasmimport" لاستيراد ميزات من WebAssembly ، بالإضافة إلى دعم البطاقات الجديدة مثل Gopher Badges.
أخيرا إذا كنت مهتمًا بمعرفة المزيد عنها ، يمكنك التحقق من التفاصيل في الرابط التالي.
كيفية تثبيت Tinygo على Linux؟
لمن هم مهتم بالقدرة على تثبيت Tinygo، على Debian و Raspbian و Ubuntu ومشتقاته. يجب أن يفتحوا محطة وفيها سنقوم بتنفيذ الأمر التالي:
wget https://github.com/tinygo-org/tinygo/releases/download/v0.28.1/tinygo_0.28.1_amd64.deb sudo dpkg -i tinygo_0.28.1_amd64.deb
للحالة الخاصة لأنظمة أجهزة ARM (إصدارات Raspbian و Ubuntu)
سنقوم بكتابة ما يلي:
wget https://github.com/tinygo-org/tinygo/releases/download/v0.28.1/tinygo_0.28.1_arm64.deb sudo dpkg -i tinygo_0.28.1_arm64.deb
في حالة مستخدمي Arch Linux ومشتقاته ، يجب عليهم تنفيذ الأمر التالي:
sudo pacman -S tinygo
الآن بالنسبة لمستخدمي Fedora:
sudo dnf install tinygo
بعد الانتهاء من التثبيت ، يجب عليهم التأكد من أن مسار tinygo في مسارهم.
تصدير PATH = $ PATH: / usr / local / tinygo / bin
أخيرا ل تحقق من التثبيت سنقوم بكتابة الأمر التالي:
نسخة tinygo
ويجب أن يرمينا بشيء من هذا القبيل
إصدار tinygo 0.28.1 linux / amd64
لمعرفة المزيد حول هذا الموضوع ، يمكنك استشارة الرابط التالي.