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 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 distribuído por 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? selecionado 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. ainda não, 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:

  • Geração de arquivos executáveis ​​muito compactos;
  • Suporte para os modelos de placas de microcontroladores mais comuns;
  • Pronto para a Web;
  • Suporte a CGo com sobrecarga mínima ao chamar funções 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 é 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. compatibilidade Com todos os aplicativos Go.

    A principal diferença em relação a um compilador semelhante emgo 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

  • Compre hospedagem confiável para sites com proteção DDoS, servidores VPS VDS 🔥 Compre hospedagem de sites confiável com proteção contra DDoS, servidores VPS/VDS | ProHoster