випуск проекту , в рамках якого розвивається компілятор мови 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.
Ключові цілі проекту:
Не входить до основних цілей підтримка багатоядерних систем,
ефективний запуск величезної кількості співпрограм (сам по собі запуск співпрограм підтримується повною мірою), досягнення рівня продуктивності еталонного компілятора 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
