Udgivelse af Tinygo 0.7.0, LLVM-baseret Go-kompiler

Ledig projektudgivelse Tinygo 0.7.0, 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 distribueret af 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å valgte 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 sin nuværende form understøttes 15 mikrocontroller-modeller, herunder forskellige boards fra Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary og Phytec. Programmer kan også kompileres til at køre i en browser i WebAssembly-format og som eksekverbare filer til Linux. Understøtter ESP8266/ESP32 controllere Ikke endnu, 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:

  • Generering af meget kompakte eksekverbare filer;
  • Understøttelse af de mest almindelige modeller af mikrocontrollerkort;
  • Mulighed for anvendelse til internettet;
  • CGo-understøttelse med minimal overhead ved opkald af funktioner i C;
  • Understøttelse af de fleste standardpakker og mulighed for at kompilere eksisterende standardkode uden at ændre den.

    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 kompatibilitet med alle Go-applikationer.

    Den største forskel fra en lignende compiler emgo 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

  • Tilføj en kommentar