Выпуск Tinygo 0.7.0, кампілятара мовы Go на базе LLVM

даступны выпуск праекта Tinygo 0.7.0, у рамках якога развіваецца кампілятар мовы Go для абласцей, у якіх неабходна кампактнае ўяўленне выніковага кода і нізкае спажыванне рэсурсаў, такіх як мікракантролеры і кампактныя аднапрацэсарныя сістэмы. Код распаўсюджваецца пад ліцэнзіяй BSD.

Кампіляцыя для розных мэтавых платформ рэалізавана пры дапамозе LLVM, а для падтрымкі мовы прымяняюцца бібліятэкі, якія прымяняюцца ў асноўным інструментары ад праекта Go. Скампіляваная праграма напрамую можа запускацца на мікракантролерах, дазваляючы ўжываць Go у якасці мовы для напісання сцэнараў аўтаматызацыі.

Матывам стварэння новага праекту паслужыла жаданне выкарыстоўваць звыклую для сябе мову Go на кампактных прыладах – распрацоўнікі вырашылі, што калі існуе варыянт Python для мікракантролераў, то чаму б не стварыць падобнае для мовы Go. Go абраны замест Rust бо ён прасцейшы ў вывучэнні, падае незалежную ад рэалізацый струменяў падтрымку распаралельвання на аснове супраграм і прапануе шырокую стандартную бібліятэку («батарэйкі ўваходзяць у камплект»).

У бягучым выглядзе падтрымліваецца 15 мадэляў мікракантролераў, у тым ліку розныя платы Adafruit, Arduino, BBC micro: bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary і Phytec. Праграмы таксама могуць быць сабраны для запуску ў браўзэры ў фармаце WebAssembly і ў выглядзе выкананых файлаў для Linux. Падтрымкі кантролераў ESP8266/ESP32 пакуль няма, Але асобна развіваецца праект па даданні падтрымкі чыпа Xtensa у LLVM, які пакуль адзначаны як нестабільны і не гатовых для інтэграцыі з TinyGo.

Ключавыя мэты праекта:

  • Генерацыя вельмі кампактных выкананых файлаў;
  • Падтрымка найболей распаўсюджаных мадэляў поплаткаў мікракантролераў;
  • Магчымасць ужывання для Web;
  • Падтрымка CGo з мінімальнымі накладнымі выдаткамі пры выкліку функцый на мове Сі;
  • Падтрымка большай часткі стандартных пакетаў і магчымасць кампіляцыі тыпавога існуючага кода без яго змены.

    Не ўваходзіць у лік асноўных мэт падтрымка шмат'ядравых сістэм,
    эфектыўны запуск велізарнай колькасці супраграм (сам па сабе запуск супраграм падтрымліваецца ў поўнай меры), дасягненне ўзроўню прадукцыйнасці эталоннага кампілятара gc (аптымізацыя аддаецца на водкуп LLVM і ў некаторых ужываннях Tinygo можа апынуцца хутчэй gc) і поўная сумяшчальнасць з усімі праграмамі на Go.

    Асноўным адрозненнем ад падобнага кампілятара эмга з'яўляецца спроба захавання арыгінальнай мадэлі кіравання памяццю Go з выкарыстаннем зборшчыка смецця і задзейнічанне LLVM для генерацыі эфектыўнага кода замест кампіляцыі ў прадстаўленне на мове Сі. Tinygo таксама прапануе новую runtime-бібліятэку, у якой рэалізаваны аптымізаваныя для кампактных сістэм планавальнік, сістэма размеркавання памяці і апрацоўшчыкі радкоў. На базе новага runtime пераствораны некаторыя пакеты, такія як sync і reflect.

    З змен у выпуску 0.7 адзначаецца рэалізацыя каманды "tinygo test", забеспячэнне падтрымкі зборкі смецця для большасці мэтавых поплаткаў (на базе ARM Cortex-M) і WebAssembly, падтрымка платы HiFive1 rev B на аснове архітэктуры RISC-V і платы Arduino nano33,
    паляпшэнне падтрымкі мовы (падтрымка бітавых палёў з выкарыстаннем гетараў і сетэраў, падтрымка ананімных структур).

    Крыніца: opennet.ru

  • Дадаць каментар