Wydanie Tinygo 0.7.0, kompilatora Go opartego na LLVM

Do dyspozycji wydanie projektu Tinygo 0.7.0, 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 dystrybuowane przez 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ść wybrany 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 jeszcze nie, 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:

  • Generowanie bardzo kompaktowych plików wykonywalnych;
  • Obsługa najpopularniejszych modeli płytek mikrokontrolerów;
  • Możliwość zastosowania w Internecie;
  • Obsługa CGo przy minimalnym obciążeniu podczas wywoływania funkcji w C;
  • Wsparcie dla większości standardowych pakietów i możliwość kompilacji ogólnego istniejącego kodu bez jego zmiany.

    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 kompatybilność ze wszystkimi aplikacjami Go.

    Główna różnica w stosunku do podobnego kompilatora emgo 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

  • Dodaj komentarz