lanzamiento del proyecto , que está desarrollando un compilador del lenguaje Go para áreas donde se requiere una representación compacta del código resultante y un bajo consumo de recursos, como microcontroladores y sistemas compactos de un solo procesador. Código bajo la licencia BSD.
La compilación para diversas plataformas se implementa mediante LLVM, y la compatibilidad con el lenguaje se proporciona a través de bibliotecas utilizadas principalmente en la cadena de herramientas del proyecto Go. El programa compilado puede ejecutarse directamente en microcontroladores, lo que permite utilizar Go como lenguaje para escribir scripts de automatización.
La motivación para crear el nuevo proyecto fue el deseo de utilizar el conocido lenguaje Go en dispositivos compactos; los desarrolladores razonaron que si existe una versión de Python para microcontroladores, ¿por qué no crear algo similar para el lenguaje Go? en lugar de Rust porque es más fácil de aprender, proporciona soporte independiente del subproceso para el paralelismo basado en corrutinas y ofrece una biblioteca estándar completa ("baterías incluidas").
Actualmente, se admiten 15 modelos de microcontroladores, incluyendo varias placas de Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary y Phytec. Los programas también se pueden compilar para su ejecución en el navegador en formato WebAssembly y como archivos ejecutables para LinuxCompatibilidad con controladores ESP8266/ESP32 , pero se está desarrollando un proyecto aparte para añadir compatibilidad con el chip Xtensa a LLVM, que actualmente está marcado como inestable y no está listo para su integración con TinyGo.
Objetivos clave del proyecto:
El soporte para sistemas multinúcleo no es uno de los objetivos principales.
Lanzamiento eficiente de una gran cantidad de corrutinas (el lanzamiento de corrutinas en sí está totalmente soportado), alcanzando el nivel de rendimiento del compilador gc de referencia (la optimización se deja a LLVM y, en algunas aplicaciones, Tinygo puede ser más rápido que gc) y completo con todas las aplicaciones Go.
La principal diferencia con un compilador similar Tinygo busca preservar el modelo original de gestión de memoria con recolección de basura de Go y aprovecha LLVM para generar código eficiente en lugar de compilarlo a una representación en C. Tinygo también ofrece una nueva biblioteca de tiempo de ejecución que implementa un planificador, un sistema de asignación de memoria y manejadores de cadenas optimizados para sistemas compactos. Varios paquetes, como sync y reflect, se han reconstruido utilizando este nuevo entorno de ejecución.
Los cambios en la versión 0.7 incluyen la implementación del comando "tinygo test", soporte para la recolección de basura para la mayoría de las placas objetivo (basadas en ARM Cortex-M) y WebAssembly, soporte para la placa HiFive1 rev B basada en la arquitectura RISC-V y la placa Arduino nano33.
Soporte mejorado para el lenguaje (soporte para campos de bits mediante getters y setters, soporte para estructuras anónimas).
Fuente: opennet.ru
