Выпуск Tinygo 0.34, компилятора языка Go на базе LLVM

Опубликован выпуск проекта 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=…'”.

Release. Ссылка here.