انتشار Tinygo 0.7.0، کامپایلر Go مبتنی بر LLVM

در دسترس انتشار پروژه تینیگو ۰.۷.۰که در حال توسعه یک کامپایلر زبان 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 آماده نیست.

اهداف کلیدی پروژه:

  • تولید فایل‌های اجرایی بسیار فشرده؛
  • پشتیبانی از رایج‌ترین مدل‌های برد میکروکنترلر؛
  • آماده برای وب؛
  • پشتیبانی از CGo با حداقل سربار هنگام فراخوانی توابع C؛
  • پشتیبانی از اکثر بسته های استاندارد و امکان کامپایل کد موجود استاندارد بدون تغییر آن.

    پشتیبانی از سیستم‌های چند هسته‌ای یکی از اهداف اصلی نیست،
    راه‌اندازی کارآمد تعداد زیادی کوروتین (اجرای خود کوروتین‌ها به طور کامل پشتیبانی می‌شود)، دستیابی به سطح عملکرد کامپایلر مرجع 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

  • اضافه کردن نظر