projekt release , som utvecklar en Go-språkkompilator för områden som kräver kompakt representation av den resulterande koden och låg resursförbrukning, såsom mikrokontroller och kompakta enprocessorsystem. Koda under BSD-licensen.
Kompilering för olika målplattformar implementeras med hjälp av LLVM, och bibliotek som används i huvudverktygslådan från Go-projektet används för att stödja språket. Det kompilerade programmet kan köras direkt på mikrokontroller, vilket gör att Go kan användas som ett språk för att skriva automatiseringsskript.
Motivationen för att skapa ett nytt projekt var önskan att använda det välbekanta Go-språket på kompakta enheter - utvecklarna resonerade att om det fanns en Python-version för mikrokontroller, varför inte skapa en liknande för Go-språket. Gå istället för Rust eftersom det är lättare att lära sig, ger trådoberoende stöd för koroutinbaserad parallellisering och erbjuder ett omfattande standardbibliotek ("batterier medföljer").
I sin nuvarande form stöds 15 mikrokontrollermodeller, inklusive olika kort från Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary och Phytec. Program kan också kompileras för att köras i en webbläsare i WebAssembly-format och som körbara filer för Linux. Stöder ESP8266/ESP32-kontroller , men ett separat projekt utvecklas för att lägga till stöd för Xtensa-chippet i LLVM, som fortfarande är markerat som instabilt och inte redo för integration med TinyGo.
Viktiga projektmål:
Stöd för flerkärniga system hör inte till huvudmålen,
effektiv lansering av ett stort antal coroutines (lanseringen av coroutines i sig stöds fullt ut), uppnående av prestandanivån för referenskompilatorn gc (optimering lämnas till LLVM och i vissa applikationer kan Tinygo vara snabbare än gc) och fullständig med alla Go-applikationer.
Den största skillnaden från en liknande kompilator är ett försök att bevara Gos ursprungliga minneshanteringsmodell genom att använda skräpinsamling och använda LLVM för att generera effektiv kod istället för att kompilera den till en C-representation. Tinygo erbjuder också ett nytt runtime-bibliotek som implementerar en schemaläggare, minnesallokeringssystem och stränghanterare optimerade för kompakta system. Vissa paket, som sync och reflect, har återskapats baserat på den nya körtiden.
Bland ändringarna i release 0.7 är implementeringen av kommandot "tinygo test", tillhandahållandet av sophämtningsstöd för de flesta målkort (baserat på ARM Cortex-M) och WebAssembly, stöd för HiFive1 rev B-kortet baserat på RISC- V-arkitektur och Arduino nano33-kortet,
förbättrat språkstöd (stöd för bitfält med hjälp av getters och sättare, stöd för anonyma strukturer).
Källa: opennet.ru
