liberação do projeto , que está desenvolvendo um compilador da linguagem Go para áreas onde são necessárias uma representação compacta do código resultante e baixo consumo de recursos, como microcontroladores e sistemas compactos de processador único. Código sob a licença BSD.
A compilação para diversas plataformas de destino é implementada usando LLVM, e o suporte à linguagem é fornecido por bibliotecas usadas principalmente no conjunto de ferramentas do projeto Go. O programa compilado pode ser executado diretamente em microcontroladores, permitindo que o Go seja usado como uma linguagem para escrever scripts de automação.
A motivação para a criação do novo projeto foi o desejo de usar a linguagem Go, já conhecida, em dispositivos compactos — os desenvolvedores raciocinaram que, se já existe uma versão em Python para microcontroladores, por que não criar algo semelhante para a linguagem Go? Em vez de Rust, porque é mais fácil de aprender, oferece suporte agnóstico a threads para paralelismo baseado em corrotinas e disponibiliza uma biblioteca padrão abrangente ("com tudo incluído").
Atualmente, são suportados 15 modelos de microcontroladores, incluindo diversas placas da Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary e Phytec. Os programas também podem ser compilados para execução no navegador em formato WebAssembly e como executáveis Linux. Suporte para controladores ESP8266/ESP32. , mas um projeto separado está sendo desenvolvido para adicionar suporte ao chip Xtensa no LLVM, que atualmente está marcado como instável e não está pronto para integração com o TinyGo.
Principais objetivos do projeto:
O suporte para sistemas multi-core não é um dos principais objetivos.
Lançamento eficiente de um grande número de corrotinas (o próprio lançamento de corrotinas é totalmente suportado), atingindo o nível de desempenho do compilador GC de referência (a otimização fica a cargo do LLVM e, em algumas aplicações, o Tinygo pode ser mais rápido que o GC) e completo. Com todos os aplicativos Go.
A principal diferença em relação a um compilador semelhante O Tinygo busca preservar o modelo original de gerenciamento de memória com coleta de lixo do Go e utiliza o LLVM para gerar código eficiente em vez de compilá-lo para uma representação em C. O Tinygo também oferece uma nova biblioteca de tempo de execução que implementa um agendador, um sistema de alocação de memória e manipuladores de strings otimizados para sistemas compactos. Diversos pacotes, como `sync` e `reflect`, foram reconstruídos utilizando o novo tempo de execução.
As alterações na versão 0.7 incluem a implementação do comando "tinygo test", suporte para coleta de lixo na maioria das placas-alvo (baseadas em ARM Cortex-M) e WebAssembly, suporte para a placa HiFive1 rev B baseada na arquitetura RISC-V e para a placa Arduino nano33.
Suporte aprimorado para idiomas (suporte para campos de bits usando getters e setters, suporte para estruturas anônimas).
Fonte: opennet.ru
