Compilation for various target platforms is implemented using LLVM, and libraries used in the main toolkit from the Go project are used to support the language. The compiled program can be directly run on microcontrollers, allowing Go to be used as a language for writing automation scripts.
The motivation for creating a new project was the desire to use the familiar Go language on compact devices - the developers reasoned that if there was a Python version for microcontrollers, then why not create a similar one for the Go language. Go
In its current form, 15 microcontroller models are supported, including various boards from Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary and Phytec. Programs can also be compiled to run in a browser in WebAssembly format and as executable files for Linux. Supports ESP8266/ESP32 controllers
Key goals of the project:
Support for multi-core systems is not among the main goals,
efficient launch of a huge number of coroutines (the launch of coroutines itself is fully supported), achievement of the performance level of the reference compiler gc (optimization is left to LLVM and in some applications Tinygo may be faster than gc) and complete
The main difference from a similar compiler
Among the changes in release 0.7 are the implementation of the βtinygo testβ command, the provision of garbage collection support for most target boards (based on ARM Cortex-M) and WebAssembly, support for the HiFive1 rev B board based on the RISC-V architecture and the Arduino nano33 board,
improved language support (support for bit fields using getters and setters, support for anonymous structures).
Source: opennet.ru