projectuitgave , dat een Go-taalcompiler ontwikkelt voor gebieden die een compacte weergave van de resulterende code en een laag bronnenverbruik vereisen, zoals microcontrollers en compacte systemen met één processor. Code onder BSD-licentie.
Compilatie voor verschillende doelplatforms wordt geΓ―mplementeerd met behulp van LLVM, en bibliotheken die worden gebruikt in de hoofdtoolkit van het Go-project worden gebruikt om de taal te ondersteunen. Het gecompileerde programma kan rechtstreeks op microcontrollers worden uitgevoerd, waardoor Go kan worden gebruikt als taal voor het schrijven van automatiseringsscripts.
De motivatie voor het creΓ«ren van een nieuw project was de wens om de bekende Go-taal op compacte apparaten te gebruiken - de ontwikkelaars redeneerden dat als er een Python-versie voor microcontrollers was, waarom dan niet een soortgelijke versie voor de Go-taal zouden maken. Gaan in plaats van Rust omdat het gemakkelijker te leren is, thread-onafhankelijke ondersteuning biedt voor op coroutine gebaseerde parallellisatie en een uitgebreide standaardbibliotheek biedt (βinclusief batterijenβ).
Π ΡΠ΅ΠΊΡΡΠ΅ΠΌ Π²ΠΈΠ΄Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ 15 ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ², Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΏΠ»Π°ΡΡ Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary ΠΈ Phytec. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΎΠ±ΡΠ°Π½Ρ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ WebAssembly ΠΈ Π² Π²ΠΈΠ΄Π΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π»Ρ Linux. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ² ESP8266/ESP32 , maar er wordt een apart project ontwikkeld om ondersteuning toe te voegen voor de Xtensa-chip in LLVM, die nog steeds als onstabiel is gemarkeerd en niet klaar is voor integratie met TinyGo.
Belangrijkste projectdoelen:
Ondersteuning voor multi-coresystemen behoort niet tot de hoofddoelen,
efficiΓ«nte lancering van een groot aantal coroutines (de lancering van coroutines zelf wordt volledig ondersteund), het bereiken van het prestatieniveau van de referentiecompiler gc (optimalisatie wordt overgelaten aan LLVM en in sommige toepassingen kan Tinygo sneller zijn dan gc) en voltooid met alle Go-applicaties.
Het belangrijkste verschil met een vergelijkbare compiler is een poging om het oorspronkelijke geheugenbeheermodel van Go te behouden met behulp van garbagecollection en LLVM te gebruiken om efficiΓ«nte code te genereren in plaats van deze naar een C-representatie te compileren. Tinygo biedt ook een nieuwe runtimebibliotheek die een planner, een geheugentoewijzingssysteem en stringhandlers implementeert die zijn geoptimaliseerd voor compacte systemen. Sommige pakketten, zoals sync en reflect, zijn opnieuw gemaakt op basis van de nieuwe runtime.
Tot de veranderingen in release 0.7 behoren de implementatie van het commando βtinygo testβ, het bieden van ondersteuning voor garbagecollection voor de meeste doelborden (gebaseerd op ARM Cortex-M) en WebAssembly, ondersteuning voor het HiFive1 rev B-bord gebaseerd op de RISC- V-architectuur en het Arduino nano33-bord,
verbeterde taalondersteuning (ondersteuning voor bitvelden met behulp van getters en setters, ondersteuning voor anonieme structuren).
Bron: opennet.ru
