izdanje projekta , 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 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 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 , 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:
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 sa svim Go aplikacijama.
Glavna razlika od sličnog kompajlera 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
