wydanie projektu , która opracowuje kompilator języka Go dla obszarów wymagających zwartej reprezentacji wynikowego kodu i niskiego zużycia zasobów, takich jak mikrokontrolery i kompaktowe systemy jednoprocesorowe. Kod na licencji BSD.
Kompilacja dla różnych platform docelowych jest realizowana przy użyciu LLVM, a do obsługi języka służą biblioteki użyte w głównym zestawie narzędzi z projektu Go. Skompilowany program można uruchomić bezpośrednio na mikrokontrolerach, dzięki czemu Go można używać jako języka do pisania skryptów automatyzujących.
Motywacją do stworzenia nowego projektu była chęć wykorzystania znanego języka Go na urządzeniach kompaktowych – twórcy uznali, że skoro istnieje wersja Pythona dla mikrokontrolerów, to dlaczego nie stworzyć podobnej dla języka Go. Iść zamiast Rusta, ponieważ jest łatwiejszy do nauczenia, zapewnia niezależną od wątków obsługę równoległości opartą na współprogramach i oferuje obszerną bibliotekę standardową („baterie w zestawie”).
W obecnej formie obsługiwanych jest 15 modeli mikrokontrolerów, w tym różne płytki firm Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary i Phytec. Programy można także kompilować do działania w przeglądarce w formacie WebAssembly oraz jako pliki wykonywalne dla systemu Linux. Obsługuje kontrolery ESP8266/ESP32 , ale opracowywany jest osobny projekt mający na celu dodanie obsługi chipa Xtensa w LLVM, który nadal jest oznaczony jako niestabilny i nie gotowy do integracji z TinyGo.
Kluczowe cele projektu:
Wsparcie dla systemów wielordzeniowych nie jest jednym z głównych celów,
sprawne uruchomienie ogromnej liczby współprogramów (samo uruchomienie współprogramów jest w pełni obsługiwane), osiągnięcie poziomu wydajności referencyjnego kompilatora gc (optymalizację pozostawiono LLVM i w niektórych aplikacjach Tinygo może być szybsze niż gc) i zakończenie ze wszystkimi aplikacjami Go.
Główna różnica w stosunku do podobnego kompilatora jest próbą zachowania oryginalnego modelu zarządzania pamięcią Go przy użyciu wyrzucania elementów bezużytecznych i użycia LLVM do wygenerowania wydajnego kodu zamiast kompilowania go do reprezentacji C. Tinygo oferuje także nową bibliotekę wykonawczą, która implementuje harmonogram, system alokacji pamięci i procedury obsługi ciągów zoptymalizowane dla systemów kompaktowych. Niektóre pakiety, takie jak Sync i Reflect, zostały odtworzone w oparciu o nowe środowisko wykonawcze.
Wśród zmian w wersji 0.7 znajduje się implementacja polecenia „tinygo test”, zapewnienie obsługi zbierania śmieci dla większości płyt docelowych (opartych na ARM Cortex-M) i WebAssembly, obsługa płyty HiFive1 rev B opartej na RISC- architektura V i płytka Arduino nano33,
ulepszona obsługa języków (obsługa pól bitowych przy użyciu metod pobierających i ustawiających, obsługa struktur anonimowych).
Źródło: opennet.ru
