Lançamento do Tinygo 0.7.0, compilador Go baseado em LLVM

Disponível liberação do projeto Tinygo 0.7.0, que está desenvolvendo um compilador da linguagem Go para áreas que exigem representação compacta do código resultante e baixo consumo de recursos, como microcontroladores e sistemas compactos de processador único. Código distribuído por sob a licença BSD.

A compilação para várias plataformas de destino é implementada usando LLVM, e as bibliotecas usadas no kit de ferramentas principal do projeto Go são usadas para suportar a linguagem. O programa compilado pode ser executado diretamente em microcontroladores, permitindo que Go seja usado como linguagem para escrever scripts de automação.

A motivação para criar um novo projeto foi o desejo de usar a linguagem Go familiar em dispositivos compactos - os desenvolvedores raciocinaram que se houvesse uma versão Python para microcontroladores, por que não criar uma semelhante para a linguagem Go. Ir selecionado em vez de Rust porque é mais fácil de aprender, fornece suporte independente de thread para paralelização baseada em corrotinas e oferece uma extensa biblioteca padrão (“baterias incluídas”).

Em sua forma atual, são suportados 15 modelos de microcontroladores, incluindo várias placas da Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary e Phytec. Os programas também podem ser compilados para rodar em um navegador no formato WebAssembly e como arquivos executáveis ​​para Linux. Suporta controladores ESP8266/ESP32 ainda não, mas um projeto separado está sendo desenvolvido para adicionar suporte ao chip Xtensa no LLVM, que ainda está marcado como instável e não está pronto para integração com o TinyGo.

Principais objetivos do projeto:

  • Geração de arquivos executáveis ​​bastante compactos;
  • Suporte para os modelos mais comuns de placas microcontroladoras;
  • Possibilidade de aplicação para Web;
  • Suporte CGo com sobrecarga mínima ao chamar funções em C;
  • Suporte para a maioria dos pacotes padrão e capacidade de compilar código padrão existente sem alterá-lo.

    O suporte para sistemas multi-core não está entre os objetivos principais,
    lançamento eficiente de um grande número de corrotinas (o lançamento de corrotinas em si é totalmente suportado), obtenção do nível de desempenho do compilador de referência gc (a otimização é deixada para LLVM e em algumas aplicações o Tinygo pode ser mais rápido que gc) e completo compatibilidade com todos os aplicativos Go.

    A principal diferença de um compilador semelhante emgo é uma tentativa de preservar o modelo original de gerenciamento de memória do Go usando coleta de lixo e usar LLVM para gerar código eficiente em vez de compilá-lo em uma representação C. Tinygo também oferece uma nova biblioteca de tempo de execução que implementa um agendador, sistema de alocação de memória e manipuladores de strings otimizados para sistemas compactos. Alguns pacotes, como sincronizar e refletir, foram recriados com base no novo tempo de execução.

    Entre as mudanças na versão 0.7 estão a implementação do comando “tinygo test”, o fornecimento de suporte à coleta de lixo para a maioria das placas alvo (baseadas em ARM Cortex-M) e WebAssembly, suporte para a placa HiFive1 rev B baseada no RISC- Arquitetura V e a placa Arduino nano33,
    suporte de linguagem aprimorado (suporte para campos de bits usando getters e setters, suporte para estruturas anônimas).

    Fonte: opennet.ru

  • Adicionar um comentário