Lansarea Tinygo 0.7.0, compilator Go bazat pe LLVM

Disponibil lansarea proiectului Tinygo 0.7.0, care dezvoltă un compilator de limbaj Go pentru zonele care necesită o reprezentare compactă a codului rezultat și un consum redus de resurse, cum ar fi microcontrolere și sisteme compacte cu un singur procesor. Cod distribuit de sub licența BSD.

Compilarea pentru diverse platforme țintă este implementată folosind LLVM, iar bibliotecile utilizate în setul de instrumente principal din proiectul Go sunt folosite pentru a susține limbajul. Programul compilat poate fi rulat direct pe microcontrolere, permițând ca Go să fie folosit ca limbaj pentru scrierea scripturilor de automatizare.

Motivația pentru crearea unui nou proiect a fost dorința de a utiliza limbajul familiar Go pe dispozitive compacte - dezvoltatorii au motivat că, dacă există o versiune Python pentru microcontrolere, atunci de ce să nu creăm una similară pentru limbajul Go. Merge selectat în loc de Rust, deoarece este mai ușor de învățat, oferă suport independent de fire pentru paralelizarea bazată pe corutine și oferă o bibliotecă standard extinsă („baterii incluse”).

În forma sa actuală, sunt acceptate 15 modele de microcontrolere, inclusiv diverse plăci de la Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary și Phytec. Programele pot fi, de asemenea, compilate pentru a rula într-un browser în format WebAssembly și ca fișiere executabile pentru Linux. Suporta controlere ESP8266/ESP32 Nu încă, dar un proiect separat este în curs de dezvoltare pentru a adăuga suport pentru cipul Xtensa în LLVM, care este încă marcat ca instabil și nu este pregătit pentru integrare cu TinyGo.

Obiectivele cheie ale proiectului:

  • Generarea de fișiere executabile foarte compacte;
  • Suport pentru cele mai comune modele de plăci de microcontroler;
  • Posibilitate de aplicare pentru Web;
  • Suport CGo cu supraîncărcare minimă atunci când apelați funcții în C;
  • Suport pentru majoritatea pachetelor standard și capacitatea de a compila cod generic existent fără a-l schimba.

    Suportul pentru sisteme multi-core nu este printre obiectivele principale,
    lansarea eficientă a unui număr mare de coroutine (lansarea coroutine în sine este pe deplin suportată), atingerea nivelului de performanță al compilatorului de referință gc (optimizarea este lăsată la LLVM și în unele aplicații Tinygo poate fi mai rapid decât gc) și complet compatibilitate cu toate aplicațiile Go.

    Principala diferență față de un compilator similar emgo este o încercare de a păstra modelul inițial de gestionare a memoriei Go, folosind colectarea gunoiului și de a folosi LLVM pentru a genera cod eficient în loc să îl compilați într-o reprezentare C. Tinygo oferă, de asemenea, o nouă bibliotecă de execuție care implementează un planificator, un sistem de alocare a memoriei și handlere de șir optimizate pentru sisteme compacte. Unele pachete, cum ar fi sync și reflect, au fost recreate pe baza noului timp de execuție.

    Printre modificările din versiunea 0.7 se numără implementarea comenzii „tinygo test”, furnizarea de suport pentru colectarea gunoiului pentru majoritatea plăcilor țintă (pe baza ARM Cortex-M) și WebAssembly, suport pentru placa HiFive1 rev B bazată pe RISC- Arhitectura V și placa Arduino nano33,
    suport îmbunătățit pentru limbaj (suport pentru câmpuri de biți folosind gettere și setari, suport pentru structuri anonime).

    Sursa: opennet.ru

  • Adauga un comentariu