Izdanje Tinygo 0.7.0, Go kompajlera zasnovanog na LLVM-u

Dostupno izdanje projekta Tinygo 0.7.0, koji razvija kompajler jezika Go za oblasti koje zahtevaju kompaktno predstavljanje rezultujućeg koda i nisku potrošnju resursa, kao što su mikrokontroleri i kompaktni jednoprocesorski sistemi. Kod distribuira pod BSD licencom.

Kompilacija za različite ciljne platforme se implementira pomoću LLVM-a, a biblioteke koje se koriste u glavnom kompletu alata iz Go projekta koriste se za podršku jeziku. Prevedeni program se može direktno pokrenuti na mikrokontrolerima, omogućavajući Go da se koristi kao jezik za pisanje automatizacijskih skripti.

Motivacija za kreiranje novog projekta bila je želja da se koristi poznati Go jezik na kompaktnim uređajima - programeri su zaključili da ako postoji Python verzija za mikrokontrolere, zašto onda ne stvoriti sličnu za Go jezik. Idi odabrano umjesto Rusta jer ga je lakše naučiti, pruža podršku nezavisnu od niti za paralelizaciju zasnovanu na korutini i nudi opsežnu standardnu ​​biblioteku („baterije uključene“).

U svom trenutnom obliku, podržano je 15 modela mikrokontrolera, uključujući različite ploče od Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary i Phytec. Programi se takođe mogu kompajlirati za pokretanje u pretraživaču u WebAssembly formatu i kao izvršne datoteke za Linux. Podržava ESP8266/ESP32 kontrolere Ne još, ali se razvija poseban projekat za dodavanje podrške za Xtensa čip u LLVM, koji je još uvijek označen kao nestabilan i nije spreman za integraciju sa 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 sa minimalnim troškovima prilikom pozivanja funkcija u C;
  • Podrška za većinu standardnih paketa i mogućnost kompajliranja generičkog postojećeg koda bez promjene.

    Podrška za sisteme sa više jezgara nije među glavnim ciljevima,
    efikasno pokretanje ogromnog broja korutina (samo pokretanje korutina je u potpunosti podržano), postizanje nivoa performansi referentnog kompajlera gc (optimizacija je prepuštena LLVM-u i u nekim aplikacijama Tinygo može biti brži od gc) i potpuno kompatibilnost sa svim Go aplikacijama.

    Glavna razlika od sličnog kompajlera emgo je pokušaj da se sačuva Go-ov originalni model upravljanja memorijom koristeći sakupljanje smeća i koristi LLVM za generisanje efikasnog koda umesto da ga kompajlira u C reprezentaciju. Tinygo također nudi novu runtime biblioteku koja implementira planer, sistem dodjele memorije i string handlere optimizirane za kompaktne sisteme. Neki paketi, kao što su sinhronizacija i refleks, ponovo su kreirani na osnovu novog vremena izvođenja.

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

    izvor: opennet.ru

  • Kupite pouzdan hosting za sajtove sa DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan web hosting sa DDoS zaštitom, VPS VDS servere | ProHoster