Рэліз мовы праграмавання Go 1.16

Прадстаўлены рэліз мовы праграмавання Go 1.16, які развіваецца кампаніяй Google пры ўдзеле супольнасці як гібрыднае рашэнне, якое спалучае высокую прадукцыйнасць кампіляваных моў з такімі добрымі якасцямі скрыптовых моў, як лёгкасць напісання кода, шпаркасць распрацоўкі і абароненасць ад памылак. Код праекту распаўсюджваецца пад ліцэнзіяй BSD.

Сінтаксіс Go заснаваны на звыклых элементах мовы Сі з асобнымі запазычаннямі з мовы Python. Мова дастаткова лаканічны, але пры гэтым код лёгка чытаецца і ўспрымаецца. Код на мове Go кампілюецца ў адасобленыя бінарныя выкананыя файлы, выкананыя нативно без выкарыстання віртуальнай машыны (модулі прафілявання, адладкі і іншыя падсістэмы выяўлення праблем на этапе выканання інтэгруюцца ў выглядзе runtime-кампанентаў), што дазваляе дамагчыся прадукцыйнасці, супастаўнай з праграмамі на мове Сі.

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

Асноўныя навіны, прадстаўленыя ў выпуску Go 1.16:

  • Дададзены пакет embed, які прадстаўляе сродкі для ўбудавання ў праграму адвольных файлаў і каталогаў. Для ўказання файлаў, якія неабходна ўбудаваць на этапе кампіляцыі, падаецца новая дырэктыва "//go:embed". Напрыклад, указанне ў кодзе каментара "//go:embed test.txt" і аб'ява следам зменнай "var f embed.FS" прывядзе ва ўбудаванні файла test.txt і магчымасці звароту да яго праз дэскрыптар "f". Падобнай выявай можна ўбудоўваць неабходныя для працы файлы з рэсурсамі або асобнымі значэннямі вызначанага тыпу, напрыклад, для атрымання радковай зменнай «s» з файла version.txt можна паказаць: import _ «embed» //go:embed version.txt var s string print (s)
  • Па змаўчанні зараз патрабуецца выкарыстанне новай сістэмы модуляў з інтэграванай падтрымкай версіявання, якая прыйшла на змену сродкам кіравання залежнасцямі на аснове GOPATH. Пераменная асяроддзі GO111MODULE зараз выстаўлена ў значэнне «on» па змаўчанні і рэжым модуляў выкарыстоўваецца незалежна ад прысутнасці файла go.mod у працоўным ці бацькоўскім каталогу. У новым рэжыме зборачныя каманды, такія як go build і go test, не змяняюць змесціва go.mod і go.sum, а каманда go install апрацоўвае аргументы з указаннем версіі (go install example.com/[электронная пошта абаронена]»). Для вяртання старога паводзіны варта змяніць GO111MODULE на значэнне "auto". Адзначаецца, што 96% распрацоўшчыкаў ужо перайшлі на новую сістэму модуляў.
  • Праведзена аптымізацыя кампаноўшчыка. Для вялікіх праектаў кампаноўка зараз выконваецца на 20-25% хутчэй і патрабуе на 5-15% менш памяці.
  • У кампілятары дададзена падтрымка inline-разгортвання функцый з скарочаным вызначэннем цыклаў "for", метадам значэнняў (method values) і канструкцыямі 'type switch'.
  • Дададзена падтрымка сістэм Apple, абсталяваных новым ARM-чыпам Apple M1. Дададзены парты netbsd/arm64 і openbsd/mips64 з падтрымкай NetBSD на 64-разрадных ARM і OpenBSD на сістэмах MIPS64. У порт linux/riscv64 дададзеная падтрымка cgo і рэжыму "-buildmode=pie".
  • Спыненая падтрымка рэжыму кампіляцыі x87 (GO386 = 387). Падтрымка працэсараў без інструкцый SSE2 зараз даступна праз праграмны рэжым "GO386=softfloat".

Дадаткова можна адзначыць пачатак тэставання бэта-выпуску мовы Dart 2.12, у якім стабілізаваны рэжым бяспечнага выкарыстання значэння "Null" (null safety), які дазволяць пазбегнуць крахаў, выкліканых спробамі выкарыстання зменных, значэнне якіх не вызначана і выстаўлена ў "Null". Рэжым разумее, што зменныя не могуць мець нявызначаныя значэнні, калі ім відавочна не прысвойваецца значэнне null. У рэжыме строга ўлічваюцца тыпы зменных, што дазваляе кампілятару прымяняць дадатковыя аптымізацыі. Адпаведнасць тыпаў правяраецца на этапе кампіляцыі, напрыклад, у выпадку спробы прысваення значэння "Null" зменнай з тыпам, не які разумее нявызначаны стан, такім як "int", будзе выведзена памылка.

Крыніца: opennet.ru

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