Sortie de Tinygo 0.7.0, compilateur Go basé sur LLVM

Disponible lancement du projet Tinygo 0.7.0, qui développe un compilateur en langage Go pour les domaines nécessitant une représentation compacte du code résultant et une faible consommation de ressources, tels que les microcontrôleurs et les systèmes compacts à processeur unique. Code distribué par sous licence BSD.

La compilation pour diverses plates-formes cibles est implémentée à l'aide de LLVM, et les bibliothèques utilisées dans la boîte à outils principale du projet Go sont utilisées pour prendre en charge le langage. Le programme compilé peut être exécuté directement sur des microcontrôleurs, permettant à Go d'être utilisé comme langage d'écriture de scripts d'automatisation.

La motivation pour créer un nouveau projet était le désir d'utiliser le langage Go familier sur des appareils compacts - les développeurs ont estimé que s'il existait une version Python pour les microcontrôleurs, alors pourquoi ne pas en créer une similaire pour le langage Go. Aller choisi au lieu de Rust car il est plus facile à apprendre, fournit une prise en charge indépendante des threads pour la parallélisation basée sur la coroutine et propose une bibliothèque standard étendue (« piles incluses »).

Dans sa forme actuelle, 15 modèles de microcontrôleurs sont pris en charge, dont diverses cartes d'Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary et Phytec. Les programmes peuvent également être compilés pour s'exécuter dans un navigateur au format WebAssembly et sous forme de fichiers exécutables pour Linux. Prend en charge les contrôleurs ESP8266/ESP32 pas encore, mais un projet distinct est en cours de développement pour ajouter la prise en charge de la puce Xtensa dans LLVM, qui est toujours marquée comme instable et non prête pour l'intégration avec TinyGo.

Principaux objectifs du projet :

  • Génération de fichiers exécutables très compacts ;
  • Prise en charge des modèles les plus courants de cartes microcontrôleurs ;
  • Possibilité d'application pour le Web ;
  • Prise en charge de CGo avec une surcharge minimale lors de l'appel de fonctions en C ;
  • Prise en charge de la plupart des packages standard et possibilité de compiler du code générique existant sans le modifier.

    La prise en charge des systèmes multicœurs ne fait pas partie des objectifs principaux,
    lancement efficace d'un grand nombre de coroutines (le lancement des coroutines lui-même est entièrement pris en charge), atteinte du niveau de performances du compilateur de référence gc (l'optimisation est laissée à LLVM et dans certaines applications Tinygo peut être plus rapide que gc) et complet compatibilité avec toutes les applications Go.

    La principale différence avec un compilateur similaire emgo est une tentative de préserver le modèle de gestion de mémoire d'origine de Go en utilisant le garbage collection et d'utiliser LLVM pour générer du code efficace au lieu de le compiler dans une représentation C. Tinygo propose également une nouvelle bibliothèque d'exécution qui implémente un planificateur, un système d'allocation de mémoire et des gestionnaires de chaînes optimisés pour les systèmes compacts. Certains packages, tels que sync et réflexion, ont été recréés sur la base du nouveau runtime.

    Parmi les changements de la version 0.7 figurent l'implémentation de la commande « tinygo test », la prise en charge du garbage collection pour la plupart des cartes cibles (basées sur ARM Cortex-M) et WebAssembly, la prise en charge de la carte HiFive1 rev B basée sur le RISC- l'architecture V et la carte Arduino nano33,
    prise en charge linguistique améliorée (prise en charge des champs de bits utilisant des getters et des setters, prise en charge des structures anonymes).

    Source: opennet.ru

  • Ajouter un commentaire