Rilascio di Tinygo 0.7.0, compilatore Go basato su LLVM

A disposizione rilascio del progetto Tinygo 0.7.0, che sta sviluppando un compilatore del linguaggio Go per aree che richiedono una rappresentazione compatta del codice risultante e un basso consumo di risorse, come microcontrollori e sistemi compatti a processore singolo. Codice distribuito da sotto licenza BSD.

La compilazione per varie piattaforme di destinazione viene implementata utilizzando LLVM e le librerie utilizzate nel toolkit principale del progetto Go vengono utilizzate per supportare il linguaggio. Il programma compilato può essere eseguito direttamente sui microcontrollori, consentendo di utilizzare Go come linguaggio per scrivere script di automazione.

La motivazione per la creazione di un nuovo progetto era il desiderio di utilizzare il familiare linguaggio Go su dispositivi compatti: gli sviluppatori hanno pensato che se esistesse una versione Python per microcontrollori, perché non crearne una simile per il linguaggio Go. Andare selezionato invece di Rust perché è più facile da imparare, fornisce supporto indipendente dal thread per la parallelizzazione basata su coroutine e offre un'ampia libreria standard ("batterie incluse").

Nella sua forma attuale, sono supportati 15 modelli di microcontrollori, comprese varie schede di Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary e Phytec. I programmi possono anche essere compilati per essere eseguiti in un browser in formato WebAssembly e come file eseguibili per Linux. Supporta i controller ESP8266/ESP32 non ancora, ma è in fase di sviluppo un progetto separato per aggiungere il supporto per il chip Xtensa in LLVM, che è ancora contrassegnato come instabile e non pronto per l'integrazione con TinyGo.

Obiettivi chiave del progetto:

  • Generazione di file eseguibili molto compatti;
  • Supporto per i modelli più comuni di schede a microcontrollore;
  • Possibilità di applicazione per il Web;
  • Supporto CGo con sovraccarico minimo quando si chiamano funzioni in C;
  • Supporto per la maggior parte dei pacchetti standard e possibilità di compilare codice esistente standard senza modificarlo.

    Il supporto ai sistemi multi-core non rientra tra gli obiettivi principali,
    lancio efficiente di un numero enorme di coroutine (il lancio delle coroutine stesso è completamente supportato), raggiungimento del livello di prestazioni del compilatore di riferimento gc (l'ottimizzazione è lasciata a LLVM e in alcune applicazioni Tinygo potrebbe essere più veloce di gc) e completamento совместимость con tutte le applicazioni Go.

    La differenza principale rispetto a un compilatore simile emo è un tentativo di preservare il modello di gestione della memoria originale di Go utilizzando la garbage collection e utilizzare LLVM per generare codice efficiente invece di compilarlo in una rappresentazione C. Tinygo offre anche una nuova libreria runtime che implementa uno scheduler, un sistema di allocazione della memoria e gestori di stringhe ottimizzati per sistemi compatti. Alcuni pacchetti, come sync e reflect, sono stati ricreati in base al nuovo runtime.

    Tra le modifiche nella versione 0.7 ci sono l'implementazione del comando "tinygo test", la fornitura del supporto per la 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 RISC- Architettura V e scheda Arduino nano33,
    supporto linguistico migliorato (supporto per campi di bit che utilizzano getter e setter, supporto per strutture anonime).

    Fonte: opennet.ru

  • Aggiungi un commento