Tinygo, un compilador Go basado en LLVM
Si trabajas con microcontroladores y eres amante de Go, Tinygo puede ser para ti, ya que este se desarrolla un compilador Go para áreas que requieren una representación compacta del código resultante y un bajo consumo de recursos, como microcontroladores de sistemas integrados y WebAssembl.
TinyGo, es un compilador que tiene como objetivo llevar la compilación de Go a varias plataformas de destino que se implementa mediante LLVM, y las bibliotecas utilizadas en el conjunto de herramientas principal del proyecto Go se utilizan para admitir el lenguaje.
En el sitio web de Tinygo, se describe que:
Puede compilar y ejecutar programas TinyGo en más de 94 placas de microcontroladores diferentes, como BBC micro:bit y Arduino Uno.
TinyGo también puede producir código WebAssembly (WASM) que es de tamaño muy compacto. Puede compilar programas para navegadores web, así como para servidores y entornos informáticos perimetrales que admitan la familia de interfaces WebAssembly System Interface (WASI) .
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?
En TinyGo, el programa compilado se puede ejecutar directamente en microcontroladores, lo que hace posible usar Go como lenguaje para escribir scripts de automatización. Actualmente TinyGo admiten 94 modelos de microcontroladores, incluidas varias placas tales como Raspberry Pi Pico, Nordic, SiFive, entre otras.
TinyGo proporciona los controladores especiales para interactuar con sensores y dispositivos externos conectados, así como para admitir interfaces como I2C, GPIO y SPI. Los programas también se pueden compilar en formato WebAssembly (wasm/wasi) para ejecutarse en un navegador y como archivos binarios para Linux.
Objetivos clave del proyecto:
- La capacidad de usar un subconjunto del lenguaje familiar Go en dispositivos compactos. Go fue elegido sobre Rust porque es más fácil de aprender, proporciona soporte independiente de subprocesos para la paralelización basada en rutinas y ofrece una biblioteca estándar extensa
- Generación de archivos ejecutables muy compactos.
- Soporte para los modelos más comunes de placas de microcontroladores.
- La capacidad de usar para la Web y crear aplicaciones WebAssembly independientes utilizando la interfaz WASI (WebAssembly
- System Interface) para trabajar con archivos, sockets y otras funciones proporcionadas por el sistema operativo.
- Compatibilidad con CGo con una sobrecarga mínima al llamar a funciones en lenguaje C.
- Compatibilidad con la mayoría de los paquetes estándar y la capacidad de compilar código existente genérico sin cambiarlo.
- A diferencia del compilador similar en desuso emgo, Tinygo conserva el modelo de administración de memoria original de Go mediante un recolector de basura y usa LLVM en lugar de compilar en una representación C para generar código nativo eficiente.
Cabe mencionar que hace poco Tinygo recibió una nueva versión, la cual es la 0.28 y en esta nueva versión se destaca que se mejora significativamente el soporte de reflexión y ofrece su propia implementación de la biblioteca de reflexión, lo que hizo posible lograr la compatibilidad con muchos paquetes de la biblioteca estándar que tenían problemas antes.
Además, la nueva versión agrega compatibilidad con la directiva » //go:wasmimport» para importar funciones desde WebAssembly, ademas de que se agregó soporte para nuevas tarjetas como Gopher Badge.
Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.
¿Como instalar Tinygo en Linux?
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.28.1/tinygo_0.28.1_amd64.deb sudo dpkg -i tinygo_0.28.1_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.28.1/tinygo_0.28.1_arm64.deb sudo dpkg -i tinygo_0.28.1_arm64.deb
En el caso de los que son usuarios de Arch Linux y derivados, deben ejecutar el siguiente comando:
sudo pacman -S tinygo
Ahora para el caso de los usuarios de Fedora:
sudo dnf install tinygo
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 version
Y nos deberá arrojar algo así
tinygo version 0.28.1 linux/amd64
Para conocer más al respecto puedes consultar el siguiente enlace.