Projektveröffentlichung , in dessen Rahmen der Compiler für die Programmiersprache Go entwickelt wird, um kompakte Code-Darstellungen und niedrigen Ressourcenverbrauch zu ermöglichen, beispielsweise für Mikrocontroller und kompakte Einprozessor-Systeme. Der Code unter der BSD-Lizenz.
wird für verschiedene Zielplattformen mit LLVM kompiliert, und zur Unterstützung der Sprache kommen hauptsächlich Bibliotheken aus dem Go-Projekt zum Einsatz. Das kompilierte Programm kann direkt auf Mikrocontrollern ausgeführt werden, was es ermöglicht, Go als Sprache für Automatisierungsskripte zu verwenden.
Der Anstoß zur Schaffung des neuen Projekts war der Wunsch, die vertraute Programmiersprache Go auf kompakten Geräten zu nutzen – die Entwickler kamen zu dem Schluss, dass, wenn es eine Python-Option für Mikrocontroller gibt, warum nicht auch eine ähnliche Lösung für die Programmiersprache Go schaffen. Go an Stelle von Rust gewählt, da es einfacher zu erlernen ist, eine implementierungsunabhängige Unterstützung für parallele Ausführung auf Basis von Koroutinen bietet und eine umfangreiche Standardbibliothek („Batterien sind im Lieferumfang enthalten“) umfasst.
Aktuell werden 15 Modelle von Mikrocontrollern 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 im Browser im WebAssembly-Format und als ausführbare Dateien für Linux kompiliert werden. Unterstützung für ESP8266/ESP32-Controller. , es gibt jedoch ein separates Projekt zur Hinzufügung der Unterstützung für den Xtensa-Chip in LLVM, der derzeit als instabil und nicht bereit für die Integration mit TinyGo betrachtet wird.
Hauptziele des Projekts:
Die Unterstützung von Mehrkernsystemen gehört nicht zu den Hauptzielen,
effiziente Ausführung einer großen Anzahl von Coroutinen (die Ausführung von Coroutinen wird vollständig unterstützt), Erreichung einer Leistung auf dem Niveau des Referenzcompilers gc (Optimierung wird LLVM überlassen, und in einigen Anwendungen kann TinyGo schneller als gc sein) und vollständige mit allen Go-Anwendungen.
Das Hauptunterscheidungsmerkmal zu einem ähnlichen Compiler ist ein Versuch, das ursprüngliche Gedächtnismodell von Go mit einem Garbage Collector zu bewahren und LLVM zur effizienten Codegenerierung statt zur Kompilierung in C-ähnliche Darstellungen zu nutzen. TinyGo bietet auch eine neue Runtime-Bibliothek, die für kompakte Systeme optimierte Scheduler, Speicherverwaltungssysteme und String-Handler implementiert. Auf Basis dieser neuen Runtime wurden einige Pakete wie sync und reflect neu erstellt.
Zu den Änderungen in der Version 0.7 gehört die Implementierung des Befehls „tinygo test“, die Unterstützung der Garbage Collection für die meisten Zielplatinen (basierend auf ARM Cortex-M) und WebAssembly, die Unterstützung der HiFive1 rev B-Platine auf RISC-V-Basis sowie der Arduino Nano 33-Platine.
Verbesserungen in der Sprachunterstützung (Unterstützung von Bitfeldern mit Gettern und Settern, Unterstützung anonymer Strukturen).
Quelle: opennet.ru
