Die Veröffentlichung von Tinygo 0.28 ist jetzt verfügbar. Dieses Projekt entwickelt einen Compiler für die Programmiersprache Go, der besonders für Bereiche geeignet ist, in denen eine kompakte Darstellung des erzeugten Codes und ein geringer Ressourcenverbrauch erforderlich sind, wie zum Beispiel bei Mikrocontrollern und kompakten Einprozessor-Systemen. Die Kompilierung für verschiedene Zielplattformen erfolgt mithilfe von LLVM, und die Unterstützung der Sprache erfolgt über die Bibliotheken, die hauptsächlich im Go-Projekt verwendet werden. Der Code steht unter der BSD-Lizenz.
Das kompilierte Programm kann direkt auf Mikrocontrollern ausgeführt werden, was es ermöglicht, Go als Sprache für Automatisierungsskripte zu verwenden. Derzeit werden 94 Modelle von Mikrocontrollern unterstützt, darunter verschiedene Adafruit-Boards, Arduino, BBC micro, ESP32, M5Stack, ST Micro, Digispark, Raspberry Pi Pico, Nordic Semiconductor, SiFive HiFive1, STM32, Makerdiary und Phytec. Spezielle Treiber werden bereitgestellt, um mit Sensoren und angeschlossenen externen Geräten zu interagieren sowie zur Unterstützung von Schnittstellen wie I2C, GPIO und SPI. Programme können auch im WebAssembly-Format (wasm/wasi) für die Ausführung im Browser sowie als ausführbare Dateien für Linux kompiliert werden.
Hauptziele des Projekts:
- Die Möglichkeit, ein Teilmenge der vertrauten Programmiersprache Go auf kompakten Geräten zu verwenden. Die Sprache Go wurde anstelle von Rust gewählt, da sie einfacher zu erlernen ist, unabhängige Unterstützung für paralleles Arbeiten auf der Grundlage von Koroutinen bietet und eine umfangreiche Standardbibliothek („Batterien sind enthalten“) mitbringt.
- Generierung von sehr kompakten ausführbaren Dateien.
- Unterstützung der gängigsten Modelle von Mikrocontroller-Platinen.
- Anwendungsmöglichkeiten für das Web und die Erstellung isolierter WebAssembly-Anwendungen, unter Verwendung der WASI-Schnittstelle (WebAssembly System Interface) für den Umgang mit Dateien, Sockets und anderen Funktionen, die vom Betriebssystem bereitgestellt werden.
- Unterstützung von CGo mit minimalen Overheadkosten beim Aufruf von Funktionen in der Programmiersprache C.
- Unterstützung der meisten Standardpakete und die Möglichkeit, bestehenden typisierten Code ohne Änderungen zu kompilieren.
- Im Gegensatz zum zurzeit veralteten Compiler emgo verwendet Tinygo das originale Speicherverwaltungskonzept von Go mit Garbage Collection und nutzt LLVM, um effizienten Maschinencode zu generieren, anstatt in C-Code zu kompilieren.
In der neuen Version wurde die Unterstützung für Reflection erheblich verbessert und eine eigene Implementierung der Reflect-Bibliothek vorgeschlagen, was die Kompatibilität mit vielen Paketen der Standardbibliothek, bei denen zuvor Probleme auftraten, ermöglicht hat. Darüber hinaus wurde in der neuen Version die Unterstützung für die Direktive „//go:wasmimport Modulname Funktionsname“ zum Importieren von Funktionen aus WebAssembly hinzugefügt. Neue Hardware-Plattformen, wie das Gopher Badge, werden ebenfalls unterstützt.
Quelle: opennet.ru
