lanzamento do proxecto , que está a desenvolver un compilador da linguaxe Go para áreas onde se require unha representación compacta do código resultante e un baixo consumo de recursos, como microcontroladores e sistemas compactos dun só procesador. Código baixo a licenza BSD.
A compilación para varias plataformas de destino impleméntase mediante LLVM e a compatibilidade con idiomas é proporcionada por bibliotecas empregadas principalmente na cadea de ferramentas do proxecto Go. O programa compilado pode executarse directamente en microcontroladores, o que permite que Go se use como linguaxe para escribir scripts de automatización.
A motivación para crear o novo proxecto foi o desexo de usar a coñecida linguaxe Go en dispositivos compactos: os desenvolvedores razoaron que se existe unha versión de Python para microcontroladores, por que non crear algo similar para a linguaxe Go? en lugar de Rust porque é máis doado de aprender, proporciona soporte independente de fíos para o paralelismo baseado en corutinas e ofrece unha biblioteca estándar completa ("baterías incluídas").
Actualmente, admítense 15 modelos de microcontroladores, incluíndo varias placas de Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary e Phytec. Os programas tamén se poden compilar para a súa execución no navegador en formato WebAssembly e como executábeis de Linux. Compatibilidade con controladores ESP8266/ESP32. , pero está a desenvolverse un proxecto separado para engadir compatibilidade co chip Xtensa a LLVM, que actualmente está marcado como inestable e non listo para a integración con TinyGo.
Obxectivos clave do proxecto:
O soporte para sistemas multinúcleo non é un dos principais obxectivos,
lanzamento eficiente dun gran número de corutinas (o propio lanzamento de corutinas é totalmente compatible), acadando o nivel de rendemento do compilador gc de referencia (a optimización déixase a LLVM e nalgunhas aplicacións Tinygo pode ser máis rápido que gc) e completo con todas as aplicacións de Go.
A principal diferenza cun compilador similar Tinygo tenta preservar o modelo orixinal de xestión de memoria con recollida de lixo de Go e aproveita LLVM para xerar código eficiente en lugar de compilalo nunha representación en C. Tinygo tamén ofrece unha nova biblioteca de tempo de execución que implementa un programador, un sistema de asignación de memoria e xestores de cadeas optimizados para sistemas compactos. Varios paquetes, como sync e reflect, foron reconstruídos usando o novo tempo de execución.
As modificacións da versión 0.7 inclúen a implementación do comando "tinygo test", compatibilidade coa recollida de lixo para a maioría das placas de destino (baseadas en ARM Cortex-M) e WebAssembly, compatibilidade coa placa HiFive1 rev B baseada na arquitectura RISC-V e a placa Arduino nano33,
Mellora da compatibilidade con idiomas (compatibilidade con campos de bits mediante captadores e definidores, compatibilidade con estruturas anónimas).
Fonte: opennet.ru
