izdaja projekta , ki razvija prevajalnik jezika Go za področja, kjer sta potrebna kompaktna predstavitev nastale kode in nizka poraba virov, kot so mikrokrmilniki in kompaktni enoprocesorski sistemi. Koda pod licenco BSD.
Prevajanje za različne ciljne platforme je izvedeno z uporabo LLVM, jezikovno podporo pa zagotavljajo knjižnice, ki se uporabljajo predvsem v orodni verigi projekta Go. Prevedeni program se lahko izvaja neposredno na mikrokrmilnikih, kar omogoča uporabo jezika Go kot jezika za pisanje skript za avtomatizacijo.
Motivacija za ustvarjanje novega projekta je bila želja po uporabi znanega jezika Go na kompaktnih napravah - razvijalci so sklepali, da če obstaja različica Pythona za mikrokrmilnike, zakaj potem ne bi ustvarili nečesa podobnega za jezik Go. namesto Rusta, ker ga je lažje naučiti, zagotavlja podporo za paralelizem, ki temelji na korutinah, neodvisno od niti, in ponuja obsežno standardno knjižnico ("baterije so vključene").
В текущем виде поддерживается 15 моделей микроконтроллеров, включая различные платы Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary и Phytec. Программы также могут быть собраны для запуска в браузере в формате WebAssembly и в виде исполняемых файлов для Linux. Поддержки контроллеров ESP8266/ESP32 , vendar se razvija ločen projekt za dodajanje podpore za čip Xtensa v LLVM, ki je trenutno označen kot nestabilen in ni pripravljen za integracijo s TinyGo.
Ključni cilji projekta:
Podpora za večjedrne sisteme ni eden glavnih ciljev,
učinkovit zagon ogromnega števila korutin (sam zagon korutin je v celoti podprt), doseganje ravni zmogljivosti referenčnega prevajalnika gc (optimizacija je prepuščena LLVM in v nekaterih aplikacijah je Tinygo lahko hitrejši od gc) in popolno z vsemi aplikacijami Go.
Glavna razlika od podobnega prevajalnika Tinygo poskuša ohraniti Gojev originalni model upravljanja pomnilnika z zbiranjem smeti in namesto prevajanja v predstavitev C uporablja LLVM za ustvarjanje učinkovite kode. Tinygo ponuja tudi novo izvajalno knjižnico, ki implementira razporejevalnik, sistem za dodeljevanje pomnilnika in upravljavce nizov, optimizirane za kompaktne sisteme. Več paketov, kot sta sync in reflect, je bilo obnovljenih z uporabo novega izvajalnega okolja.
Spremembe v izdaji 0.7 vključujejo implementacijo ukaza "tinygo test", podporo za zbiranje smeti za večino ciljnih plošč (na osnovi ARM Cortex-M) in WebAssembly, podporo za ploščo HiFive1 rev B, ki temelji na arhitekturi RISC-V, in ploščo Arduino nano33,
Izboljšana jezikovna podpora (podpora za bitna polja z uporabo metod za pridobivanje in nastavljanje, podpora za anonimne strukture).
Vir: opennet.ru
