Опубліковано випуск проекту Tinygo 0.34, що розвиває компілятор мови Go для малопотужних систем, таких як мікроконтролери та пристрої, що вбудовуються, яким необхідна генерація дуже компактних виконуваних файлів і низьке споживання ресурсів. Компіляція для підтримуваних цільових платформ реалізована в tinygo за допомогою LLVM, а бібліотеки функцій запозичені з основного інструментарію проекту Go. Код розповсюджується під ліцензією BSD.
Скомпільована програма може запускатися безпосередньо на мікроконтролерах, що дозволяє застосовувати підмножину мови Go для написання сценаріїв автоматизації. У поточному вигляді підтримується понад сто моделей мікроконтролерів, включаючи різні плати Adafruit, Arduino, BBC micro, ESP32, M5Stack, ST Micro, Digispark, Raspberry Pi Pico, Nordic Semiconductor, SiFive HiFive1, STM32, Makerdiary та Phytec. Для взаємодії з датчиками та підключеними зовнішніми пристроями, а також підтримки інтерфейсів, таких як I2C, GPIO і SPI, надаються спеціальні драйвери.
На відміну від схожого компілятора emgo, що не оновлювався останні три роки, в tinygo збережена оригінальна модель управління пам'яттю Go з використанням збирача сміття і замість компіляції у виставу на мові Сі задіяний LLVM для генерації ефективного машинного коду. У програмах може без змін використовуватися вже існуючий типовий код на мові Go, а також більшість стандартних пакетів. Крім генерації машинного коду, в tinygo доступна підтримка генерації WebAssembly з можливістю створення відокремлених WebAssembly-додатків, використовуючи інтерфейс WASI (WebAssembly System Interface).
У новій версії реалізована підтримка архітектури MIPS з порядком байтів big-endian, а також додана підтримка плат RAKwireless RAK4631 і WaveShare ESP-C3-32S-Kit. Для експорту WebAssembly-функцій додана директива "//go:wasmexport". Проведено оптимізацію продуктивності збирача сміття. Додані нові опції командного рядка «-C DIR» та «-ldflags='-extldflags=…'».
Джерело: opennet.ru
