Випуск Tinygo 0.7.0 компілятора мови Go на базі LLVM

доступний випуск проекту Tinygo 0.7.0, в рамках якого розвивається компілятор мови Go для областей, в яких необхідне компактне представлення результуючого коду та низьке споживання ресурсів, таких як мікроконтролери та компактні однопроцесорні системи. Код поширюється під ліцензією BSD.

Компіляція для різних цільових платформ реалізована за допомогою LLVM, а для підтримки мови використовуються бібліотеки, які застосовуються в основному інструментарії від проекту Go. Скомпільована програма може запускатися безпосередньо на мікроконтролерах, дозволяючи застосовувати Go в якості мови для написання сценаріїв автоматизації.

Мотивом створення нового проекту стало бажання використовувати звичну для себе мову Go на компактних пристроях — розробники розсудили, що якщо існує варіант Python для мікроконтролерів, то чому б не створити таке для мови Go. Go обраний замість Rust тому що він більш простий у вивченні, надає незалежну від реалізації потоків підтримку розпаралелювання на основі співпрограм і пропонує велику стандартну бібліотеку («батарейки входять в комплект»).

У поточному вигляді підтримується 15 моделей мікроконтролерів, включаючи різні плати Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary та Phytec. Програми також можуть бути зібрані для запуску в браузері у форматі WebAssembly та у вигляді файлів, що виконуються для Linux. Підтримки контролерів ESP8266/ESP32 поки немає, але окремо розвивається проект з додавання підтримки чіпа Xtensa в LLVM, який поки що відзначений як нестабільний і не готовий до інтеграції з TinyGo.

Ключові цілі проекту:

  • Генерація дуже компактних файлів, що виконуються;
  • Підтримка найпоширеніших моделей плат мікроконтролерів;
  • Можливість застосування для Web;
  • Підтримка CGo з мінімальними накладними витратами під час виклику функцій мовою Сі;
  • Підтримка більшості стандартних пакетів і можливість компіляції типового існуючого коду без його зміни.

    Не входить до основних цілей підтримка багатоядерних систем,
    ефективний запуск величезної кількості співпрограм (сам по собі запуск співпрограм підтримується повною мірою), досягнення рівня продуктивності еталонного компілятора gc (оптимізація віддається на відкуп LLVM і в деяких застосуваннях Tinygo може виявитися швидше gc) та повна сумісність з усіма програмами на Go.

    Основною відмінністю від схожого компілятора емго є спроба збереження оригінальної моделі управління пам'яттю Go з використанням збирача сміття та задіяння LLVM для генерації ефективного коду замість компіляції у подання мовою Сі. Tinygo також пропонує нову runtime-бібліотеку, в якій реалізовані оптимізовані для компактних систем планувальник, система розподілу пам'яті та обробники рядків. На базі нового runtime перетворені деякі пакети, такі як sync та reflect.

    Зі змін у випуску 0.7 відзначається реалізація команди «tinygo test», забезпечення підтримки складання сміття для більшості цільових плат (на базі ARM Cortex-M) та WebAssembly, підтримка плати HiFive1 rev B на основі архітектури RISC-V та плати Arduino nano33,
    покращення підтримки мови (підтримка бітових полів з використанням гетерів та сеттерів, підтримка анонімних структур).

    Джерело: opennet.ru

  • Додати коментар або відгук