izdanje projekta , koja razvija kompajler za Go jezik za područja gdje je potreban kompaktan prikaz rezultirajućeg koda i niska potrošnja resursa, kao što su mikrokontroleri i kompaktni jednoprocesorski sustavi. Kod pod BSD licencom.
Kompilacija za različite ciljne platforme implementirana je pomoću LLVM-a, a jezičnu podršku pružaju biblioteke koje se prvenstveno koriste u alatnom lancu Go projekta. Kompilirani program može se izvoditi izravno na mikrokontrolerima, što omogućuje korištenje Goa kao jezika za pisanje skripti za automatizaciju.
Motivacija za stvaranje novog projekta bila je želja za korištenjem poznatog Go jezika na kompaktnim uređajima - programeri su zaključili da ako postoji Python verzija za mikrokontrolere, zašto ne stvoriti nešto slično za Go jezik. umjesto Rusta jer ga je lakše naučiti, pruža podršku za paralelizam temeljen na korutinama neovisnu o nitima i nudi sveobuhvatnu standardnu biblioteku ("baterije uključene").
В текущем виде поддерживается 15 моделей микроконтроллеров, включая различные платы Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary и Phytec. Программы также могут быть собраны для запуска в браузере в формате WebAssembly и в виде исполняемых файлов для Linux. Поддержки контроллеров ESP8266/ESP32 , ali se razvija zaseban projekt za dodavanje podrške za Xtensa čip u LLVM, koji je trenutno označen kao nestabilan i nije spreman za integraciju s TinyGo.
Ključni ciljevi projekta:
Podrška za višejezgrene sustave nije jedan od glavnih ciljeva,
učinkovito pokretanje ogromnog broja korutina (samo pokretanje korutina je u potpunosti podržano), postizanje razine performansi referentnog gc kompajlera (optimizacija je prepuštena LLVM-u, a u nekim aplikacijama Tinygo može biti brži od gc-a) i potpuno sa svim Go aplikacijama.
Glavna razlika od sličnog kompajlera Tinygo pokušava sačuvati Goov izvorni model upravljanja memorijom sakupljanjem smeća i koristi LLVM za generiranje učinkovitog koda umjesto kompajliranja u C reprezentaciju. Tinygo također nudi novu runtime biblioteku koja implementira planer, sustav dodjele memorije i rukovatelje stringovima optimizirane za kompaktne sustave. Nekoliko paketa, kao što su sync i reflect, obnovljeno je korištenjem novog runtime okruženja.
Promjene u verziji 0.7 uključuju implementaciju naredbe "tinygo test", podršku za sakupljanje smeća za većinu ciljnih ploča (baziranih na ARM Cortex-M) i WebAssembly, podršku za HiFive1 rev B ploču baziranu na RISC-V arhitekturi i Arduino nano33 ploču,
Poboljšana jezična podrška (podrška za bitna polja pomoću gettera i settera, podrška za anonimne strukture).
Izvor: opennet.ru
