Rilascio di Tinygo 0.7.0, compilatore del linguaggio Go basato su LLVM

Disponibile il rilascio del progetto Tinygo 0.7.0, nell'ambito del quale si sviluppa il compilatore del linguaggio Go per aree in cui è necessario un formato compatto del codice risultante e un basso consumo di risorse, come microcontrollori e sistemi a singolo processore compatti. Il codice distribuito con licenza BSD.

La compilazione per diverse piattaforme di destinazione è realizzata tramite LLVM, e per supportare il linguaggio si utilizzano librerie applicate principalmente nell'ecosistema del progetto Go. Il programma compilato può essere eseguito direttamente sui microcontrollori, permettendo di utilizzare Go come linguaggio per scrivere script di automazione.

La motivazione per la creazione di questo nuovo progetto è stata il desiderio di utilizzare un linguaggio che si conosce bene, Go, su dispositivi compatti: gli sviluppatori hanno pensato che se esiste una versione di Python per microcontrollori, perché non crearne una simile per il linguaggio Go. Go è stato scelto invece di Rust poiché è più semplice da apprendere, offre un supporto per il parallelismo indipendente dall'implementazione basato su coroutine e propone un'ampia libreria standard ("le batterie sono incluse").

Attualmente vengono supportati 15 modelli di microcontrollori, incluse varie schede Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary e Phytec. I programmi possono anche essere compilati per l'esecuzione nel browser in formato WebAssembly e come file eseguibili per Linux. Supporto per i controllori ESP8266/ESP32 non disponibile, ma è in fase di sviluppo un progetto per aggiungere il supporto per il chip Xtensa in LLVM, attualmente contrassegnato come instabile e non pronto per l'integrazione con TinyGo.

Obiettivi principali del progetto:

  • Generazione di file eseguibili molto compatti;
  • Supporto per i modelli di schede microcontrollori più diffusi;
  • Applicabilità per il Web;
  • Supporto per CGo con costi minimi per le chiamate a funzioni in linguaggio C;
  • Supporto per la maggior parte dei pacchetti standard e possibilità di compilazione di codice esistente senza modifiche.

    Il supporto per sistemi multicore non è un obiettivo principale,
    l'efficiente avvio di un numero elevato di goroutine (l'avvio delle goroutine è completamente supportato), raggiungendo un livello di prestazioni paragonabile a quello del compilatore gc (l'ottimizzazione è affidata a LLVM e in alcune applicazioni Tinygo può risultare più veloce del gc) e totale compatibilità con tutte le applicazioni in Go.

    La principale differenza rispetto ad un compilatore simile emgo è il tentativo di mantenere il modello originale di gestione della memoria di Go utilizzando un garbage collector e di impiegare LLVM per generare codice efficiente invece di compilare in una rappresentazione in C. Tinygo offre anche una nuova libreria runtime, che implementa uno scheduler ottimizzato per sistemi compatti, un sistema di gestione della memoria e gestori di stringhe. Basata sul nuovo runtime, sono stati ricreati alcuni pacchetti, come sync e reflect.

    Tra le novità della versione 0.7, si segnala l'implementazione del comando «tinygo test», il supporto per il garbage collection per la maggior parte delle schede target (basate su ARM Cortex-M) e WebAssembly, il supporto per la scheda HiFive1 rev B basata su architettura RISC-V e la scheda Arduino nano33.
    miglioramento del supporto del linguaggio (supporto dei campi bit con l'uso di getter e setter, supporto per strutture anonime).

    Fonte: opennet.ru

  • Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster