انتشار پروژه که در حال توسعه یک کامپایلر زبان Go برای حوزههایی است که در آنها نمایش فشرده کد حاصل و مصرف کم منابع مورد نیاز است، مانند میکروکنترلرها و سیستمهای تک پردازندهای فشرده. تحت مجوز BSD
کامپایل برای پلتفرمهای هدف مختلف با استفاده از LLVM پیادهسازی میشود و پشتیبانی زبانی توسط کتابخانههایی که عمدتاً در زنجیره ابزار پروژه Go استفاده میشوند، ارائه میشود. برنامه کامپایل شده میتواند مستقیماً روی میکروکنترلرها اجرا شود و به Go اجازه میدهد به عنوان زبانی برای نوشتن اسکریپتهای اتوماسیون استفاده شود.
انگیزه ایجاد این پروژه جدید، تمایل به استفاده از زبان آشنای Go در دستگاههای جمعوجور بود - توسعهدهندگان استدلال کردند که اگر نسخه پایتون برای میکروکنترلرها وجود دارد، پس چرا چیزی مشابه برای زبان Go ایجاد نکنیم. به جای Rust، زیرا یادگیری آن آسانتر است، پشتیبانی بدون وابستگی به رشته (thread-agnostic) برای موازیسازی مبتنی بر Coroutine ارائه میدهد و یک کتابخانه استاندارد جامع ("باتریها شامل میشوند") ارائه میدهد.
در حال حاضر، ۱۵ مدل میکروکنترلر پشتیبانی میشوند، از جمله بردهای مختلف از Adafruit، Arduino، BBC micro:bit، ST Micro، Digispark، Nordic Semiconductor، Makerdiary و Phytec. برنامهها همچنین میتوانند برای اجرای مرورگر در قالب WebAssembly و به عنوان فایلهای اجرایی لینوکس کامپایل شوند. پشتیبانی از کنترلرهای ESP8266/ESP32 اما یک پروژه جداگانه برای افزودن پشتیبانی از تراشه Xtensa به LLVM در حال توسعه است که در حال حاضر به عنوان ناپایدار مشخص شده و برای ادغام با TinyGo آماده نیست.
اهداف کلیدی پروژه:
پشتیبانی از سیستمهای چند هستهای یکی از اهداف اصلی نیست،
راهاندازی کارآمد تعداد زیادی کوروتین (اجرای خود کوروتینها به طور کامل پشتیبانی میشود)، دستیابی به سطح عملکرد کامپایلر مرجع gc (بهینهسازی به LLVM واگذار شده است و در برخی برنامهها Tinygo ممکن است سریعتر از gc باشد) و تکمیل با تمام برنامههای Go.
تفاوت اصلی با کامپایلر مشابه Tinygo تلاش میکند تا مدل مدیریت حافظه اصلی Go که مبتنی بر جمعآوری زباله است را حفظ کند و از LLVM برای تولید کد کارآمد به جای کامپایل به زبان C استفاده میکند. Tinygo همچنین یک کتابخانه زمان اجرای جدید ارائه میدهد که یک زمانبند، سیستم تخصیص حافظه و کنترلکنندههای رشتهای بهینه شده برای سیستمهای فشرده را پیادهسازی میکند. چندین بسته، مانند sync و reflect، با استفاده از زمان اجرای جدید بازسازی شدهاند.
تغییرات در نسخه ۰.۷ شامل پیادهسازی دستور "tinygo test"، پشتیبانی از جمعآوری زباله برای اکثر بردهای هدف (مبتنی بر ARM Cortex-M) و WebAssembly، پشتیبانی از برد HiFive1 rev B مبتنی بر معماری RISC-V و برد Arduino nano33 میشود.
پشتیبانی زبان بهبود یافته (پشتیبانی از فیلدهای بیتی با استفاده از getterها و setterها، پشتیبانی از ساختارهای ناشناس).
منبع: opennet.ru
