إطلاق المشروع ، التي تعمل على تطوير مترجم لغة Go للمجالات التي تتطلب تمثيلًا مضغوطًا للتعليمات البرمجية الناتجة واستهلاكًا منخفضًا للموارد، مثل وحدات التحكم الدقيقة وأنظمة المعالج الفردي المدمجة. شفرة تحت رخصة BSD.
يتم تنفيذ التجميع لمختلف الأنظمة الأساسية المستهدفة باستخدام LLVM، ويتم استخدام المكتبات المستخدمة في مجموعة الأدوات الرئيسية من مشروع Go لدعم اللغة. يمكن تشغيل البرنامج المترجم مباشرة على وحدات التحكم الدقيقة، مما يسمح باستخدام لغة Go كلغة لكتابة البرامج النصية للأتمتة.
كان الدافع وراء إنشاء مشروع جديد هو الرغبة في استخدام لغة Go المألوفة على الأجهزة المدمجة - وقد استنتج المطورون أنه إذا كان هناك إصدار Python لوحدات التحكم الدقيقة، فلماذا لا يتم إنشاء نسخة مماثلة للغة Go. يذهب بدلاً من Rust لأنه أسهل في التعلم، ويوفر دعمًا مستقلاً للخيط للموازاة القائمة على coroutine، ويوفر مكتبة قياسية واسعة النطاق ("البطاريات متضمنة").
في شكله الحالي، يتم دعم 15 نموذجًا من وحدات التحكم الدقيقة، بما في ذلك لوحات مختلفة من Adafruit وArduino وBBC micro:bit وST Micro وDigispark وNordic Semiconductor وMakerdiary وPhytec. يمكن أيضًا تجميع البرامج لتشغيلها في متصفح بتنسيق WebAssembly وكملفات قابلة للتنفيذ لنظام التشغيل Linux. يدعم وحدات التحكم ESP8266/ESP32 ، ولكن يجري تطوير مشروع منفصل لإضافة دعم لشريحة Xtensa في LLVM، والتي لا تزال مصنفة على أنها غير مستقرة وغير جاهزة للتكامل مع TinyGo.
الأهداف الرئيسية للمشروع:
دعم الأنظمة متعددة النواة ليس من بين الأهداف الرئيسية،
الإطلاق الفعال لعدد كبير من coroutines (يتم دعم إطلاق coroutines نفسه بشكل كامل)، وتحقيق مستوى أداء المترجم المرجعي gc (يتم ترك التحسين لـ LLVM وفي بعض التطبيقات قد يكون Tinygo أسرع من gc) وإكمال مع جميع تطبيقات Go.
الفرق الرئيسي من مترجم مماثل هي محاولة للحفاظ على نموذج إدارة الذاكرة الأصلي لـ Go باستخدام جمع البيانات المهملة واستخدام LLVM لإنشاء تعليمات برمجية فعالة بدلاً من تجميعها إلى تمثيل C. تقدم Tinygo أيضًا مكتبة وقت تشغيل جديدة تقوم بتنفيذ جدولة ونظام تخصيص الذاكرة ومعالجات سلسلة محسنة للأنظمة المدمجة. تمت إعادة إنشاء بعض الحزم، مثل المزامنة والانعكاس، استنادًا إلى وقت التشغيل الجديد.
من بين التغييرات في الإصدار 0.7 تنفيذ أمر "tinygo test"، وتوفير دعم جمع البيانات المهملة لمعظم اللوحات المستهدفة (استنادًا إلى ARM Cortex-M) وWebAssembly، ودعم لوحة HiFive1 rev B استنادًا إلى RISC- بنية V ولوحة Arduino nano33،
تحسين دعم اللغة (دعم حقول البت باستخدام الحروف والمحددات، ودعم الهياكل المجهولة).
المصدر: opennet.ru
