Vydání Tinygo 0.7.0, kompilátor Go založený na LLVM

Dostupný vydání projektu Tinygo 0.7.0, která vyvíjí kompilátor jazyka Go pro oblasti, které vyžadují kompaktní reprezentaci výsledného kódu a nízkou spotřebu zdrojů, jako jsou mikrokontroléry a kompaktní jednoprocesorové systémy. Kód distribuovány pod licencí BSD.

Kompilace pro různé cílové platformy je implementována pomocí LLVM a pro podporu jazyka jsou použity knihovny použité v hlavní sadě nástrojů z projektu Go. Zkompilovaný program lze přímo spustit 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 usoudili, že když existuje verze Pythonu pro mikrokontroléry, tak proč nevytvořit podobnou pro jazyk Go. Jít vybraný místo Rust, protože se snáze učí, poskytuje podporu paralelizace založenou na koroutině nezávislou na vláknech a nabízí rozsáhlou standardní knihovnu („včetně baterií“).

V současné podobě je podporováno 15 modelů mikrokontrolérů, včetně různých desek od Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary a Phytec. Programy lze také zkompilovat pro spuštění v prohlížeči ve formátu WebAssembly a jako spustitelné soubory pro Linux. Podporuje řadiče ESP8266/ESP32 ještě ne, ale připravuje se samostatný projekt přidání podpory pro čip Xtensa v LLVM, který je stále označen jako nestabilní a není připraven na integraci s TinyGo.

Klíčové cíle projektu:

  • Generování velmi kompaktních spustitelných souborů;
  • Podpora nejběžnějších modelů desek mikrokontrolérů;
  • Možnost aplikace pro Web;
  • podpora CGo s minimální režií při volání funkcí v C;
  • Podpora většiny standardních balíčků a schopnost kompilovat obecný existující kód bez jeho změny.

    Podpora vícejádrových systémů nepatří mezi hlavní cíle,
    efektivní spouštění velkého množství korutin (samotné spouštění koroutin je plně podporováno), dosažení výkonnostní úrovně 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í kompatibilitu se všemi aplikacemi Go.

    Hlavní rozdíl od podobného kompilátoru emgo je pokusem zachovat původní model správy paměti Go pomocí garbage collection a použít LLVM ke generování efektivního kódu namísto jeho kompilace do C reprezentace. Tinygo také nabízí novou runtime knihovnu, která implementuje plánovač, systém alokace paměti a manipulátory řetězců optimalizované pro kompaktní systémy. Některé balíčky, jako je synchronizace a odraz, byly znovu vytvořeny na základě nového běhového prostředí.

    Mezi změny ve verzi 0.7 patří implementace příkazu „tinygo test“, poskytování podpory sběru odpadků pro většinu cílových desek (na základě ARM Cortex-M) a WebAssembly, podpora desky HiFive1 rev B založené na RISC- Architektura V a deska Arduino nano33,
    vylepšená podpora jazyků (podpora bitových polí pomocí getterů a setterů, podpora anonymních struktur).

    Zdroj: opennet.ru

  • Přidat komentář