vydání projektu , která vyvíjí kompilátor jazyka Go pro oblasti, kde je vyžadována kompaktní reprezentace výsledného kódu a nízká spotřeba zdrojů, jako jsou mikrokontroléry a kompaktní jednoprocesorové systémy. Kód pod licencí BSD.
Kompilace pro různé cílové platformy je implementována pomocí LLVM a jazykovou podporu poskytují knihovny používané primárně v nástrojové sadě projektu Go. Zkompilovaný program lze spustit přímo na mikrokontrolérech, což umožňuje použití Go jako jazyka pro psaní automatizačních skriptů.
Motivací pro vytvoření nového projektu byla touha používat známý jazyk Go na kompaktních zařízeních - vývojáři uvažovali, že pokud existuje verze Pythonu pro mikrokontroléry, proč nevytvořit něco podobného pro jazyk Go. místo Rustu, protože se snáze učí, poskytuje podporu pro paralelismus založený na korutinách nezávislou na vláknech a nabízí komplexní standardní knihovnu („baterie jsou součástí balení“).
V současné době je podporováno 15 modelů mikrokontrolérů, včetně různých desek od společností Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary a Phytec. Programy lze také kompilovat pro spuštění v prohlížeči ve formátu WebAssembly a jako spustitelné soubory pro... LinuxPodpora pro řadiče ESP8266/ESP32 , ale vyvíjí se samostatný projekt, který má do LLVM přidat podporu pro čip Xtensa, jenž je momentálně označen jako nestabilní a není připraven k integraci s TinyGo.
Klíčové cíle projektu:
Podpora vícejádrových systémů není jedním z hlavních cílů,
efektivní spouštění obrovského množství korutin (samotné spouštění korutin je plně podporováno), dosažení úrovně výkonu referenčního kompilátoru gc (optimalizace je ponechána na LLVM a v některých aplikacích může být Tinygo rychlejší než gc) a kompletní se všemi aplikacemi Go.
Hlavní rozdíl oproti podobnému kompilátoru Tinygo se pokouší zachovat původní model správy paměti Go s garbage collectorem a využívá LLVM k generování efektivního kódu namísto kompilace do reprezentace v jazyce C. Tinygo také nabízí novou běhovou knihovnu, která implementuje plánovač, systém alokace paměti a obslužné rutiny řetězců optimalizované pro kompaktní systémy. Několik balíčků, jako například sync a reflect, bylo znovu sestaveno s použitím nového běhového prostředí.
Změny ve verzi 0.7 zahrnují implementaci příkazu „tinygo test“, podporu pro garbage collection pro většinu cílových desek (založených na ARM Cortex-M) a WebAssembly, podporu pro desku HiFive1 rev B založenou na architektuře RISC-V a desku Arduino nano33.
Vylepšená jazyková podpora (podpora bitových polí pomocí getterů a setterů, podpora anonymních struktur).
Zdroj: opennet.ru
