Veröffentlichung von Tinygo 0.7.0, LLVM-basierter Go-Compiler

Verfügbar Projektfreigabe Tinygo 0.7.0, das einen Go-Sprachcompiler für Bereiche entwickelt, die eine kompakte Darstellung des resultierenden Codes und einen geringen Ressourcenverbrauch erfordern, wie etwa Mikrocontroller und kompakte Einzelprozessorsysteme. Code vertrieben von unter der BSD-Lizenz.

Die Kompilierung für verschiedene Zielplattformen wird mit LLVM implementiert, und zur Unterstützung der Sprache werden Bibliotheken verwendet, die im Haupt-Toolkit des Go-Projekts verwendet werden. Das kompilierte Programm kann direkt auf Mikrocontrollern ausgeführt werden, sodass Go als Sprache zum Schreiben von Automatisierungsskripten verwendet werden kann.

Die Motivation für die Erstellung eines neuen Projekts war der Wunsch, die bekannte Go-Sprache auf kompakten Geräten zu verwenden – die Entwickler überlegten, wenn es eine Python-Version für Mikrocontroller gäbe, warum dann nicht eine ähnliche Version für die Go-Sprache erstellen? Gehen ausgewählt anstelle von Rust, weil es einfacher zu erlernen ist, Thread-unabhängige Unterstützung für Coroutine-basierte Parallelisierung bietet und eine umfangreiche Standardbibliothek („Batterien inklusive“) bietet.

In der aktuellen Form werden 15 Mikrocontroller-Modelle unterstützt, darunter verschiedene Boards von Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary und Phytec. Programme können auch für die Ausführung in einem Browser im WebAssembly-Format und als ausführbare Dateien für Linux kompiliert werden. Unterstützt ESP8266/ESP32-Controller noch nicht, aber es wird ein separates Projekt entwickelt, um Unterstützung für den Xtensa-Chip in LLVM hinzuzufügen, der immer noch als instabil markiert und nicht bereit für die Integration mit TinyGo ist.

Hauptziele des Projekts:

  • Generierung sehr kompakter ausführbarer Dateien;
  • Unterstützung für die gängigsten Modelle von Mikrocontroller-Boards;
  • Anwendungsmöglichkeit für das Web;
  • CGo-Unterstützung mit minimalem Overhead beim Aufrufen von Funktionen in C;
  • Unterstützung für die meisten Standardpakete und die Möglichkeit, generischen vorhandenen Code zu kompilieren, ohne ihn zu ändern.

    Die Unterstützung von Multicore-Systemen gehört nicht zu den Hauptzielen,
    Effizienter Start einer großen Anzahl von Coroutinen (der Start von Coroutinen selbst wird vollständig unterstützt), Erreichen des Leistungsniveaus des Referenz-Compilers gc (die Optimierung wird LLVM überlassen und in einigen Anwendungen kann Tinygo schneller als gc sein) und vollständig Kompatibilität mit allen Go-Anwendungen.

    Der Hauptunterschied zu einem ähnlichen Compiler Emgo ist ein Versuch, das ursprüngliche Speicherverwaltungsmodell von Go mithilfe der Garbage Collection beizubehalten und LLVM zu verwenden, um effizienten Code zu generieren, anstatt ihn in eine C-Darstellung zu kompilieren. Tinygo bietet außerdem eine neue Laufzeitbibliothek, die einen für kompakte Systeme optimierten Scheduler, ein Speicherzuweisungssystem und String-Handler implementiert. Einige Pakete, z. B. Sync und Reflect, wurden basierend auf der neuen Laufzeit neu erstellt.

    Zu den Änderungen in Version 0.7 gehören die Implementierung des Befehls „tinygo test“, die Bereitstellung von Garbage-Collection-Unterstützung für die meisten Zielplatinen (basierend auf ARM Cortex-M) und WebAssembly sowie Unterstützung für die HiFive1-Rev.-B-Karte auf Basis des RISC- V-Architektur und das Arduino nano33-Board,
    verbesserte Sprachunterstützung (Unterstützung für Bitfelder mit Gettern und Settern, Unterstützung für anonyme Strukturen).

    Source: opennet.ru

  • Kommentar hinzufügen