Utgivelse av Tinygo 0.7.0, LLVM-basert Go-kompilator

Tilgjengelig prosjektutgivelse Tinygo 0.7.0, som utvikler en Go-språkkompiler for områder som krever kompakt representasjon av den resulterende koden og lavt ressursforbruk, for eksempel mikrokontrollere og kompakte enkeltprosessorsystemer. Kode distribuert av under BSD-lisens.

Kompilering for ulike målplattformer er implementert ved hjelp av LLVM, og biblioteker som brukes i hovedverktøysettet fra Go-prosjektet brukes til å støtte språket. Det kompilerte programmet kan kjøres direkte på mikrokontrollere, slik at Go kan brukes som et språk for å skrive automatiseringsskript.

Motivasjonen for å lage et nytt prosjekt var ønsket om å bruke det kjente Go-språket på kompakte enheter - utviklerne resonnerte at hvis det fantes en Python-versjon for mikrokontrollere, hvorfor ikke lage en lignende for Go-språket. Gå valgt i stedet for Rust fordi det er lettere å lære, gir tråduavhengig støtte for coroutine-basert parallellisering, og tilbyr et omfattende standardbibliotek ("batterier inkludert").

I sin nåværende form støttes 15 mikrokontrollermodeller, inkludert ulike brett fra Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary og Phytec. Programmer kan også kompileres for å kjøre i en nettleser i WebAssembly-format og som kjørbare filer for Linux. Støtter ESP8266/ESP32 kontrollere Ikke ennå, men et eget prosjekt er under utvikling for å legge til støtte for Xtensa-brikken i LLVM, som fortsatt er merket som ustabil og ikke klar for integrasjon med TinyGo.

Sentrale prosjektmål:

  • Generering av svært kompakte kjørbare filer;
  • Støtte for de vanligste modellene av mikrokontrollerkort;
  • Mulighet for applikasjon for nettet;
  • CGo-støtte med minimal overhead ved oppkalling av funksjoner i C;
  • Støtte for de fleste standardpakker og muligheten til å kompilere standard eksisterende kode uten å endre den.

    Støtte for flerkjernesystemer er ikke blant hovedmålene,
    effektiv lansering av et stort antall coroutines (lanseringen av coroutines i seg selv støttes fullt ut), oppnåelse av ytelsesnivået til referansekompilatoren gc (optimalisering er overlatt til LLVM og i noen applikasjoner kan Tinygo være raskere enn gc) og fullstendig kompatibilitet med alle Go-applikasjoner.

    Hovedforskjellen fra en lignende kompilator emgo er et forsøk på å bevare Gos originale minnehåndteringsmodell ved å bruke søppelinnsamling og bruke LLVM til å generere effektiv kode i stedet for å kompilere den til en C-representasjon. Tinygo tilbyr også et nytt kjøretidsbibliotek som implementerer en planlegger, minneallokeringssystem og strengbehandlere optimalisert for kompakte systemer. Noen pakker, for eksempel sync and reflect, har blitt gjenskapt basert på den nye kjøretiden.

    Blant endringene i utgivelse 0.7 er implementeringen av «tinygo test»-kommandoen, tilveiebringelsen av søppeloppsamlingsstøtte for de fleste måltavler (basert på ARM Cortex-M) og WebAssembly, støtte for HiFive1 rev B-kortet basert på RISC- V-arkitektur og Arduino nano33-kortet,
    forbedret språkstøtte (støtte for bitfelt ved bruk av gettere og settere, støtte for anonyme strukturer).

    Kilde: opennet.ru

  • Legg til en kommentar