Tinygo un compilador de lenguaje Go basado en LLVM
TinyGO es un proyecto en la que se desarrolla un compilador de lenguaje “Go” de áreas que requieren una representación compacta del código resultante y el bajo consumo de recursos, tales como microcontroladores y sistema de un solo procesador compacto. El código se distribuye bajo la licencia BSD.
La compilación para varias plataformas de destino se implementa utilizando LLVM y para admitir el lenguaje, se utilizan bibliotecas que son utilizadas principalmente por las herramientas del proyecto Go. El programa compilado se puede ejecutar directamente en los microcontroladores, lo que le permite utilizar Go como lenguaje para escribir scripts de automatización.
Sobre Tinygo
El motivo para crear el proyecto TinyGO fue el deseo de utilizar el lenguaje Go habitual en dispositivos compactos: los desarrolladores razonaron que si hay una versión de Python para microcontroladores, entonces ¿por qué no crear una similar para el lenguaje Go?
Go se selecciona en lugar de Rust, ya que es más fácil de aprender, proporciona soporte basado en corrugación para el soporte independiente de subprocesos y ofrece una amplia biblioteca estándar (“baterías incluidas”).
En la forma actual, se admiten 15 modelos de microcontroladores, que incluyen varias placas Adafruit, Arduino, BBC micro, bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary y Phytec.
Los programas también se pueden crear para ejecutarse en un navegador en formato de versión web y como archivos ejecutables para Linux.
Todavía no hay soporte para los controladores ESP8266 / ESP32, pero se está desarrollando un proyecto para agregar soporte para el chip Xtensa en LLVM, que todavía está marcado como inestable y no está listo para la integración con TinyGo.
Objetivos clave del proyecto:
- Generación de ejecutables muy compactos
- Soporte para los modelos más comunes de tableros de microcontroladores
- Posibilidad de utilizar para la web
- Compatibilidad con CGo con una sobrecarga mínima al llamar a las funciones C
- Soporte para la mayoría de los paquetes estándar y la capacidad de compilar el código típico existente sin modificarlo.
El soporte de sistemas multi-core no es uno de los objetivos principales, el lanzamiento efectivo de una gran cantidad de coroutines (el lanzamiento forense en sí mismo es totalmente compatible), lograr el nivel de rendimiento del compilador de referencia de gc (la optimización está relegada a LLVM y en algunas aplicaciones Tinygo puede ser más rápido que gc) y Compatibilidad total con todas las aplicaciones en Go.
La principal diferencia con el compilador de emgo es el intento de guardar el modelo original de administración de memoria de Go usando el recolector de basura y usar LLVM para generar código eficiente en lugar de compilarlo en una representación en C.
Tinygo también ofrece una nueva biblioteca de tiempo de ejecución que implementa un planificador optimizado para sistemas compactos, un sistema de asignación de memoria y controladores de cadenas. Sobre la base del nuevo tiempo de ejecución, algunos paquetes fueron recreados, como sincronizar y reflejar.
Sobre la versión 0.7 de Tinygo
Actualmente Tinygo se encuentra en su versión 0.7 y de esta versión de los principales cambios que se pueden mencionar está la implementación del comando “tinygo test”, que proporciona soporte de recolección de basura para la mayoría de las placas de destino (basadas en ARM Cortex-M) y WebAssembly, que admite HiFive1 rev B basado en la arquitectura RISC-V y la placa Arduino nano33, que mejora la compatibilidad idioma (soporte para campos de bits que utilizan captadores y definidores, soporte para estructuras anónimas).
¿Como instalar Tinygo en Ubuntu y derivados?
Para quienes estén interesados en poder instalar Tinygo, en Debian, Raspbian, Ubuntu y derivados. Deben abrir una terminal y en ella vamos a ejecutar el siguiente comando:
wget https://github.com/tinygo-org/tinygo/releases/download/v0.7.0/tinygo_0.7.0_amd64.deb sudo dpkg -i tinygo_0.7.0_amd64.deb
Para el caso especial de los sistemas para dispositivos ARM (Raspbian y versiones de Ubuntu)
Vamos a teclear lo siguiente:
wget https://github.com/tinygo-org/tinygo/releases/download/v0.7.0/tinygo_0.7.0_armhf.deb sudo dpkg -i tinygo_0.7.0_armhf.deb
Después de haber realizado la instalación, deberán de asegurarse de que la ruta del tinygo esté en su PATH.
export PATH=$PATH:/usr/local/tinygo/bin
Finalmente para verificar la instalación vamos a teclear el siguiente comando:
tinygo versión
Y nos deberá arrojar algo así
tinygo version 0.7.0 linux/amd64
Para conocer mas al respecto puedes consultar el siguiente enlace.