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

در دسترس انتشار پروژه Tinygo 0.7.0، که در حال توسعه یک کامپایلر زبان Go برای مناطقی است که به نمایش فشرده کد حاصل و مصرف کم منابع نیاز دارند، مانند میکروکنترلرها و سیستم های فشرده تک پردازنده. کد توزیع شده توسط تحت مجوز BSD

کامپایل برای پلتفرم‌های هدف مختلف با استفاده از LLVM پیاده‌سازی می‌شود و کتابخانه‌های مورد استفاده در جعبه ابزار اصلی پروژه Go برای پشتیبانی از زبان استفاده می‌شوند. برنامه کامپایل شده را می توان مستقیماً روی میکروکنترلرها اجرا کرد و به Go اجازه می دهد تا به عنوان زبانی برای نوشتن اسکریپت های اتوماسیون استفاده شود.

انگیزه ایجاد یک پروژه جدید تمایل به استفاده از زبان آشنای Go در دستگاه های فشرده بود - توسعه دهندگان استدلال کردند که اگر نسخه پایتون برای میکروکنترلرها وجود دارد، پس چرا مشابه آن را برای زبان Go ایجاد نکنید. برو انتخاب شد به جای Rust، زیرا یادگیری آن آسان‌تر است، پشتیبانی مستقل از رشته برای موازی‌سازی مبتنی بر کوروتین فراهم می‌کند و کتابخانه استاندارد گسترده‌ای را ارائه می‌دهد («باتری‌ها شامل»).

در شکل فعلی، 15 مدل میکروکنترلر پشتیبانی می‌شود، از جمله بردهای مختلف 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.

    تفاوت اصلی با یک کامپایلر مشابه امگو تلاشی برای حفظ مدل اصلی مدیریت حافظه Go با استفاده از جمع آوری زباله و استفاده از LLVM برای تولید کد کارآمد به جای کامپایل کردن آن در یک نمایش C. Tinygo همچنین یک کتابخانه جدید در زمان اجرا ارائه می‌کند که یک زمان‌بندی، سیستم تخصیص حافظه و کنترل‌کننده‌های رشته بهینه‌سازی شده برای سیستم‌های فشرده را پیاده‌سازی می‌کند. برخی از بسته ها، مانند همگام سازی و بازتاب، بر اساس زمان اجرا جدید بازسازی شده اند.

    از جمله تغییرات نسخه 0.7 می توان به اجرای فرمان "Tinygo test"، ارائه پشتیبانی جمع آوری زباله برای اکثر بردهای هدف (بر اساس ARM Cortex-M) و WebAssembly، پشتیبانی از برد HiFive1 rev B بر اساس RISC- اشاره کرد. معماری V و برد آردوینو nano33،
    پشتیبانی از زبان بهبود یافته (پشتیبانی از فیلدهای بیت با استفاده از گیرنده ها و تنظیم کننده ها، پشتیبانی از ساختارهای ناشناس).

    منبع: opennet.ru

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