pagpapalabas ng proyekto , na bumubuo ng Go language compiler para sa mga lugar kung saan kinakailangan ang compact na representasyon ng resultang code at mababang resource consumption, tulad ng mga microcontroller at compact single-processor system. Code sa ilalim ng lisensya ng BSD.
Ang compilation para sa iba't ibang target na platform ay ipinapatupad gamit ang LLVM, at ang suporta sa wika ay ibinibigay ng mga library na pangunahing ginagamit sa toolchain ng proyekto ng Go. Ang pinagsama-samang programa ay maaaring tumakbo nang direkta sa mga microcontroller, na nagpapahintulot sa Go na magamit bilang isang wika para sa pagsusulat ng mga script ng automation.
Ang motibasyon para sa paglikha ng bagong proyekto ay ang pagnanais na gamitin ang pamilyar na wika ng Go sa mga compact na device - ang mga developer ay nangangatuwiran na kung mayroong bersyon ng Python para sa mga microcontroller, kung gayon bakit hindi lumikha ng isang bagay na katulad para sa wikang Go. sa halip na Rust dahil mas madaling matutunan, nagbibigay ng thread-agnostic na suporta para sa coroutine-based parallelism, at nag-aalok ng komprehensibong standard library ("kasama ang mga baterya").
Sa kasalukuyan, 15 modelo ng microcontroller ang sinusuportahan, kabilang ang iba't ibang board mula sa Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary, at Phytec. Maaari ring i-compile ang mga programa para sa pagpapatupad ng browser sa format na WebAssembly at bilang mga executable file para sa LinuxSuporta para sa mga controller ng ESP8266/ESP32 , ngunit ang isang hiwalay na proyekto ay binuo upang magdagdag ng suporta para sa Xtensa chip sa LLVM, na kasalukuyang minarkahan bilang hindi matatag at hindi handa para sa pagsasama sa TinyGo.
Mga pangunahing layunin ng proyekto:
Ang suporta para sa mga multi-core system ay hindi isa sa mga pangunahing layunin,
mahusay na paglulunsad ng isang malaking bilang ng mga coroutine (ang paglulunsad ng mga coroutine mismo ay ganap na sinusuportahan), pagkamit ng antas ng pagganap ng reference na gc compiler (ang pag-optimize ay naiwan sa LLVM at sa ilang mga application ay maaaring mas mabilis ang Tinygo kaysa sa gc) at kumpleto kasama ang lahat ng Go application.
Ang pangunahing pagkakaiba mula sa isang katulad na compiler Sinusubukan ng Tinygo na panatilihin ang orihinal na modelo ng pamamahala ng memorya na nakolekta ng basura ni Go at ginagamit ang LLVM upang makabuo ng mahusay na code sa halip na mag-compile sa isang representasyong C. Nag-aalok din ang Tinygo ng bagong runtime library na nagpapatupad ng scheduler, memory allocation system, at string handler na na-optimize para sa mga compact system. Ang ilang mga pakete, tulad ng pag-sync at pag-reflect, ay itinayong muli gamit ang bagong runtime.
Kasama sa mga pagbabago sa release 0.7 ang pagpapatupad ng command na "tinygo test", suporta para sa koleksyon ng basura para sa karamihan ng mga target na board (batay sa ARM Cortex-M) at WebAssembly, suporta para sa HiFive1 rev B board batay sa arkitektura ng RISC-V at Arduino nano33 board,
Pinahusay na suporta sa wika (suporta para sa mga bit field gamit ang mga getter at setter, suporta para sa mga anonymous na istruktura).
Pinagmulan: opennet.ru
