Lanzamento de Tinygo 0.7.0, compilador Go baseado en LLVM

Dispoñible lanzamento do proxecto Tinygo 0.7.0, que está a desenvolver un compilador de linguaxe Go para áreas que requiren unha representación compacta do código resultante e un baixo consumo de recursos, como microcontroladores e sistemas compactos dun só procesador. Código distribuído por baixo a licenza BSD.

A compilación para varias plataformas de destino implétase mediante LLVM e as bibliotecas utilizadas no conxunto de ferramentas principal do proxecto Go úsanse para soportar a linguaxe. O programa compilado pódese executar directamente en microcontroladores, o que permite que Go se use como linguaxe para escribir scripts de automatización.

A motivación para crear un novo proxecto foi o desexo de usar a linguaxe familiar Go en dispositivos compactos: os desenvolvedores pensaron que se había unha versión de Python para microcontroladores, entón por que non crear unha similar para a linguaxe Go. Vaia seleccionado en lugar de Rust porque é máis doado de aprender, ofrece soporte independente do fío para a paralelización baseada en corrutinas e ofrece unha extensa biblioteca estándar ("baterías incluídas").

Na súa forma actual, son compatibles 15 modelos de microcontroladores, incluíndo varias placas de Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary e Phytec. Tamén se poden compilar programas para executalos nun navegador en formato WebAssembly e como ficheiros executables para Linux. Admite controladores ESP8266/ESP32 Aínda non, pero estase a desenvolver un proxecto separado para engadir soporte para o chip Xtensa en LLVM, que aínda está marcado como inestable e non está preparado para a integración con TinyGo.

Obxectivos clave do proxecto:

  • Xeración de ficheiros executables moi compactos;
  • Soporte para os modelos máis comúns de placas de microcontroladores;
  • Posibilidade de aplicación para a Web;
  • Soporte CGo cunha sobrecarga mínima ao chamar funcións en C;
  • Soporte para a maioría dos paquetes estándar e a capacidade de compilar código estándar existente sen cambialo.

    O soporte para sistemas multinúcleo non está entre os obxectivos principais,
    lanzamento eficiente dun gran número de corrutinas (o lanzamento de corrutinas en si é totalmente compatible), logro do nivel de rendemento do compilador de referencia gc (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 Go.

    A principal diferenza dun compilador semellante emgo é un intento de preservar o modelo de xestión de memoria orixinal de Go mediante a recollida de lixo e usar LLVM para xerar código eficiente en lugar de compilalo nunha representación 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 controladores de cadeas optimizados para sistemas compactos. Algúns paquetes, como sync e reflect, foron recreados baseándose no novo tempo de execución.

    Entre os cambios na versión 0.7 están a implementación do comando "tinygo test", a prestación de soporte de recollida de lixo para a maioría das placas de destino (baseadas en ARM Cortex-M) e WebAssembly, soporte para a placa HiFive1 rev B baseada no RISC- Arquitectura V e a placa Arduino nano33,
    soporte de linguaxe mellorado (soporte para campos de bits usando getters e setters, soporte para estruturas anónimas).

    Fonte: opennet.ru

  • Engadir un comentario