Tinygo 0.7.0, LLVM-pohjaisen Go-kääntäjän julkaisu

Saatavilla projektin julkaisu Tinygo 0.7.0, joka kehittää Go-kielen kääntäjää alueille, jotka vaativat tuloksena olevan koodin kompaktia esitystä ja vähäistä resurssien kulutusta, kuten mikro-ohjaimet ja kompaktit yhden prosessorin järjestelmät. Koodi jakelija BSD-lisenssillä.

Kääntäminen eri kohdealustoille toteutetaan LLVM:llä ja Go-projektin päätyökalupaketissa käytettyjä kirjastoja käytetään tukemaan kieltä. Käännetty ohjelma voidaan ajaa suoraan mikro-ohjaimilla, jolloin Go:ta voidaan käyttää kielenä automaatiokomentosarjojen kirjoittamiseen.

Motiivi uuden projektin luomiseen oli halu käyttää tuttua Go-kieltä kompakteissa laitteissa – kehittäjät perustelivat, että jos mikrokontrollereille on olemassa Python-versio, niin miksei tekisi vastaavaa Go-kielelle. Mennä valittu Rustin sijaan, koska se on helpompi oppia, se tarjoaa säikeestä riippumattoman tuen korutiinipohjaiselle rinnakkaisuudelle ja tarjoaa laajan vakiokirjaston ("sisältää paristot").

Nykyisessä muodossaan tuetaan 15 mikro-ohjainmallia, mukaan lukien Adafruit-, Arduino-, BBC micro:bit-, ST Micro-, Digispark-, Nordic Semiconductor-, Makerdiary- ja Phytecin levyt. Ohjelmat voidaan myös kääntää toimimaan selaimessa WebAssembly-muodossa ja suoritettaviksi tiedostoiksi Linuxille. Tukee ESP8266/ESP32-ohjaimia ei vielä, mutta erillistä projektia kehitetään lisäämään tuen Xtensa-sirulle LLVM:ssä, joka on edelleen merkitty epävakaaksi eikä valmis integroitavaksi TinyGoon.

Hankkeen keskeiset tavoitteet:

  • Erittäin pienikokoisten suoritettavien tiedostojen luominen;
  • Tuki yleisimmille mikro-ohjainkorttimalleille;
  • Mahdollisuus soveltaa verkkoon;
  • CGo-tuki minimaalisella lisäkululla kutsuttaessa toimintoja C:ssä;
  • Tuki useimmille vakiopaketteille ja mahdollisuus kääntää olemassa oleva standardikoodi muuttamatta sitä.

    Moniytimisjärjestelmien tuki ei ole päätavoitteiden joukossa,
    valtavan määrän korutiinien tehokas käynnistäminen (itse korutiinien käynnistäminen on täysin tuettu), vertailukääntäjän gc:n suorituskykytason saavuttaminen (optimointi jätetään LLVM:n tehtäväksi ja joissakin sovelluksissa Tinygo voi olla nopeampi kuin gc) ja valmis yhteensopivuus kaikkien Go-sovellusten kanssa.

    Suurin ero samanlaiseen kääntäjään Emgo on yritys säilyttää Go:n alkuperäinen muistinhallintamalli roskienkeräyksen avulla ja käyttää LLVM:ää tehokkaan koodin luomiseen sen sijaan, että se kääntäisi sen C-esitykseen. Tinygo tarjoaa myös uuden ajonaikaisen kirjaston, joka toteuttaa kompakteille järjestelmille optimoidun ajastimen, muistin varausjärjestelmän ja merkkijonokäsittelijät. Jotkut paketit, kuten synkronointi ja reflektio, on luotu uudelleen uuden suoritusajan perusteella.

    Version 0.7 muutoksista mainittakoon "tinygo test" -komennon toteutus, roskienkeräystuen tarjoaminen useimmille kohdelevyille (perustuu ARM Cortex-M:ään) ja WebAssembly, tuki HiFive1 rev B -kortille, joka perustuu RISC- V-arkkitehtuuri ja Arduino nano33 -levy,
    parannettu kielituki (tuki bittikentille gettereillä ja asettereilla, tuki anonyymeille rakenteille).

    Lähde: opennet.ru

  • Lisää kommentti