Izdanje Tinygo 0.7.0, Go kompilatora temeljenog na LLVM-u

Dostupno izdanje projekta Tinygo 0.7.0, koji razvija prevoditelj Go jezika za područja koja zahtijevaju kompaktnu reprezentaciju rezultirajućeg koda i nisku potrošnju resursa, kao što su mikrokontroleri i kompaktni jednoprocesorski sustavi. Kodirati distribuira pod BSD licencom.

Kompilacija za različite ciljne platforme implementirana je pomoću LLVM-a, a biblioteke koje se koriste u glavnom alatu iz projekta Go koriste se za podršku jeziku. Prevedeni program može se izravno pokrenuti na mikrokontrolerima, omogućujući Go da se koristi kao jezik 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 smatrali da ako postoji Python verzija za mikrokontrolere, zašto onda ne stvoriti sličnu za Go jezik. Ići odabran umjesto Rusta jer ga je lakše naučiti, pruža podršku neovisnu o nitima za paralelizaciju temeljenu na korutinama i nudi opsežnu standardnu ​​biblioteku ("baterije uključene").

U trenutnom obliku podržano je 15 modela mikrokontrolera, uključujući različite ploče iz Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary i Phytec. Programi se također mogu kompajlirati za izvođenje u pregledniku u formatu WebAssembly i kao izvršne datoteke za Linux. Podržava ESP8266/ESP32 kontrolere Ne još, ali se razvija zasebni projekt za dodavanje podrške za Xtensa čip u LLVM, koji je još uvijek označen kao nestabilan i nije spreman za integraciju s TinyGo.

Ključni ciljevi projekta:

  • Generiranje vrlo kompaktnih izvršnih datoteka;
  • Podrška za najčešće modele mikrokontrolerskih ploča;
  • Mogućnost aplikacije za Web;
  • CGo podrška s minimalnim troškovima pri pozivanju funkcija u C-u;
  • Podrška za većinu standardnih paketa i mogućnost kompajliranja generičkog postojećeg koda bez mijenjanja.

    Podrška za višejezgrene sustave nije među glavnim ciljevima,
    učinkovito pokretanje velikog broja korutina (samo pokretanje korutina je u potpunosti podržano), postizanje razine performansi referentnog prevoditelja gc (optimizacija je prepuštena LLVM-u, au nekim aplikacijama Tinygo može biti brži od gc) i potpuna kompatibilnost sa svim Go aplikacijama.

    Glavna razlika od sličnog prevoditelja emgo je pokušaj očuvanja Go-ovog izvornog modela upravljanja memorijom korištenjem skupljanja smeća i korištenje LLVM-a 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 nizovima optimiziranim za kompaktne sustave. Neki paketi, kao što su sinkronizacija i refleksija, ponovno su kreirani na temelju novog vremena izvođenja.

    Među promjenama u izdanju 0.7 su implementacija naredbe "tinygo test", pružanje podrške za sakupljanje smeća za većinu ciljnih ploča (temeljenih na ARM Cortex-M) i WebAssembly, podrška za HiFive1 rev B ploču temeljenu na RISC- V arhitektura i Arduino nano33 ploča,
    poboljšana jezična podrška (podrška za bitna polja pomoću gettera i postavljača, podrška za anonimne strukture).

    Izvor: opennet.ru

  • Dodajte komentar