Доступен (https://github.com/tinygo-org/tinygo/releases) выпуск проекта Tinygo 0.7.0 (https://tinygo.org/), в рамках которого развивается компилятор языка Go для областей, в которых необходимо компактное представление результирующего кода и низкое потребление ресурсов, таких как микроконтроллеры и компактные однопроцессорные системы. Код распространяется (https://github.com/tinygo-org/tinygo/) под лицензией BSD.
Компиляция для различных целевых платформ реализована при помощи LLVM, а для поддержки языка применяются библиотеки, применяемые в основном инструментарии от проекта Go. Скомпилированная программа напрямую может запускаться на микроконтроллерах, позволяя применять Go в качестве языка для написания сценариев автоматизации.
Мотивом создания нового проекта послужило желание использовать привычный для себя язык Go на компактных устройствах - разработчики рассудили, что если существует вариант Python для микроконтроллеров, то почему бы не создать подобное для языка Go. Go выбран (https://tinygo.org/faq/why-go-instead-of-rust/) вместо Rust так как он более прост в изучении, предоставляет независимую от реализаций потоков поддержку распараллеливания на основе сопрограмм и предлагает обширную стандартную библиотеку ("батарейки входят в комплект").
В текущем виде поддерживается 15 моделей микроконтроллеров, включая различные платы Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary и Phytec. Программы также могут быть собраны для запуска в браузере в формате WebAssembly и в виде исполняемых файлов для Linux.
Ключевые цели проекта:
- Генерация очень компактных исполняемых файлов;
- Поддержка наиболее распространённых моделей плат микроконтроллеров;
- Возможность применения для Web;
- Поддержка CGo с минимальными накладными расходами при вызове функций на языке Си;
- Поддержка большей части стандартных пакетов и возможность компиляции типового существующего кода без его изменения.
Не входит в число основных целей поддержка многоядерных систем,
эффективный запуск огромного числа сопрограмм (сам по себе запуск сопрограмм поддерживается в полной мере), достижение уровня производительности эталонного компилятора gc (оптимизация отдаётся на откуп LLVM и в некоторых применениях Tinygo может оказаться быстрее gc) и полная совместимость (https://tinygo.org/lang-support/) со всеми приложениями на Go.
Основным отличием от похожего компилятора emgo (https://github.com/ziutek/emgo) является попытка сохранения оригинальной модели управления памятью Go с использованием сборщика мусора и задействование LLVM для генерации эффективного кода вместо компиляции в представление на языке Си.
Из изменений в выпуске 0.7 отмечается реализация команды "tinygo test", обеспечение поддержки сборки мусора для большинства целевых плат (на базе ARM Cortex-M) и WebAssembly, поддержка платы HiFive1 rev B на основе архитектуры RISC-V и платы Arduino nano33,
улучшение поддержки языка (поддержка битовых полей с использованием геттеров и сеттеров, поддержка анонимных структур).
URL: https://github.com/tinygo-org/tinygo/releases
Новость: https://www.opennet.ru/opennews/art.shtml?num=51126