В конце октября 2024 года состоялся релиз открытого проекта Tinygo 0.34. Это компилятор языка программирования Go для маломощных систем, таких как микроконтроллеры и встраиваемые устройства, которым необходима генерация очень компактных исполняемых файлов и низкое потребление ресурсов. В проекте Tinygo компиляция для поддерживаемых целевых платформ реализована при помощи LLVM, а библиотеки функций заимствованы из основного инструментария проекта Go. Исходный код решения опубликован на GitHub под лицензией BSD.
По информации OpenNET, скомпилированная с помощью Tinygo программа напрямую может запускаться на микроконтроллерах, что позволяет применять подмножество языка Go для написания сценариев автоматизации.
В текущем виде проектом Tinygo поддерживается более ста моделей микроконтроллеров, включая различные платы Adafruit, Arduino, BBC micro, ESP32, M5Stack, ST Micro, Digispark, Raspberry Pi Pico, Nordic Semiconductor, SiFive HiFive1, STM32, Makerdiary и Phytec. Для взаимодействия с датчиками и подключёнными внешними устройствами, а также для поддержки интерфейсов, таких как I2C, GPIO и SPI, предоставляются специальные драйверы.
В отличие от похожего проекта компилятора Еmgo, не обновлявшегося продолжительное время, в решении Tinygo сохранена оригинальная модель управления памятью Go с использованием сборщика мусора и вместо компиляции в представление на языке C, задействован LLVM для генерации эффективного машинного кода.
В программах с использованием Tinygo может без изменений использоваться уже существующий типовой код на языке Go, а также большая часть стандартных пакетов. Помимо генерации машинного кода, в Tinygo доступна поддержка генерации WebAssembly с возможностью создания обособленных WebAssembly-приложений, используя интерфейс WASI (WebAssembly System Interface).
В версии Tinygo 0.34 реализована поддержка архитектуры MIPS с порядком следования байтов big-endian, а также добавлена поддержка плат RAKwireless RAK4631 и WaveShare ESP-C3-32S-Kit. Для экспорта WebAssembly-функций добавлена директива «//go:wasmexport». Также разработчиками проведена оптимизация производительности сборщика мусора и добавлены новые опции командной строки «-C DIR» и «-ldflags=’-extldflags=…'».
Источник: habr.com