projektudgivelse , som udvikler en Go-sprogkompiler til områder, der kræver kompakt repræsentation af den resulterende kode og lavt ressourceforbrug, såsom mikrocontrollere og kompakte enkeltprocessorsystemer. Kode under BSD-licensen.
Kompilering til forskellige målplatforme er implementeret ved hjælp af LLVM, og biblioteker, der bruges i hovedværktøjssættet fra Go-projektet, bruges til at understøtte sproget. Det kompilerede program kan køres direkte på mikrocontrollere, hvilket gør det muligt at bruge Go som et sprog til at skrive automatiseringsscripts.
Motivationen for at lave et nyt projekt var ønsket om at bruge det velkendte Go-sprog på kompakte enheder - udviklerne ræsonnerede, at hvis der var en Python-version til mikrocontrollere, hvorfor så ikke lave en lignende til Go-sproget. Gå i stedet for Rust, fordi det er lettere at lære, giver tråduafhængig support til coroutine-baseret parallelisering og tilbyder et omfattende standardbibliotek ("batterier inkluderet").
I øjeblikket understøttes 15 mikrocontrollermodeller, herunder forskellige boards fra Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary og Phytec. Programmer kan også kompileres til browserkørsel i WebAssembly-format og som eksekverbare filer til LinuxUnderstøttelse af ESP8266/ESP32-controllere , men et separat projekt er under udvikling for at tilføje understøttelse af Xtensa-chippen i LLVM, som stadig er markeret som ustabil og ikke klar til integration med TinyGo.
Hovedprojektmål:
Støtte til multi-core systemer er ikke blandt hovedmålene,
effektiv lancering af et stort antal coroutiner (lanceringen af coroutines i sig selv er fuldt understøttet), opnåelse af ydeevneniveauet for referencekompileren gc (optimering overlades til LLVM, og i nogle applikationer kan Tinygo være hurtigere end gc) og komplet med alle Go-applikationer.
Den største forskel fra en lignende compiler er et forsøg på at bevare Go's originale hukommelsesstyringsmodel ved hjælp af skraldesamling og bruge LLVM til at generere effektiv kode i stedet for at kompilere den til en C-repræsentation. Tinygo tilbyder også et nyt runtime-bibliotek, der implementerer en skemalægger, hukommelsesallokeringssystem og strengbehandlere, der er optimeret til kompakte systemer. Nogle pakker, såsom sync og reflect, er blevet genskabt baseret på den nye runtime.
Blandt ændringerne i udgivelse 0.7 er implementeringen af "tinygo test"-kommandoen, leveringen af affaldsopsamlingsunderstøttelse for de fleste måltavler (baseret på ARM Cortex-M) og WebAssembly, understøttelse af HiFive1 rev B-kortet baseret på RISC- V-arkitektur og Arduino nano33-kortet,
forbedret sprogunderstøttelse (understøttelse af bitfelter ved hjælp af gettere og sættere, understøttelse af anonyme strukturer).
Kilde: opennet.ru
