Нашри забони барномасозии Go 1.22 муаррифӣ шудааст, ки онро Google бо иштироки ҷомеа ҳамчун як ҳалли гибридӣ таҳия мекунад, ки иҷрои баланди забонҳои тартибдодашударо бо бартариҳои забонҳои скриптӣ, ба монанди осонии навиштани код муттаҳид мекунад. , суръати рушд ва муҳофизати хатогиҳо. Рамзи лоиҳа таҳти иҷозатномаи BSD паҳн карда мешавад.
Синтаксиси Go ба унсурҳои шиноси забони Си бо баъзе вомҳо аз забони Оберон асос ёфтааст. Забон хеле мухтасар аст, аммо кодро хондан ва фаҳмидан осон аст. Рамзи Go ба файлҳои ҷудогонаи иҷрошавандаи бинарӣ, ки бе истифодаи мошини маҷозӣ кор мекунанд (профилсозӣ, модулҳои ислоҳкунӣ ва дигар зерсистемаҳои муайянкунии мушкилоти вақти корӣ ҳамчун ҷузъҳои вақти корӣ муттаҳид карда шудаанд) тартиб дода мешавад, ки имкон медиҳад иҷрои онро бо барномаҳои C муқоиса кунад.
Лоиҳа дар ибтидо бо назардошти барномасозии бисёрсоҳавӣ ва кори самаранок дар системаҳои бисёраслӣ, аз ҷумла таъмини воситаҳои сатҳи оператор барои ташкили ҳисоббарории параллелӣ ва ҳамкории байни усулҳои параллелӣ иҷрошуда таҳия шудааст. Забон инчунин муҳофизати дохилиро аз блокҳои хотираи аз ҳад зиёд ҷудошуда таъмин мекунад ва қобилияти истифодаи коллектори партовҳоро таъмин мекунад.
Дар байни тағйирот дар версияи нав:
- Дастгирии муайян кардани диапазони ададҳо ба ҳалқаҳои "for" илова карда шудааст, масалан, барои такрор кардани арзишҳо аз 0 то 9, шумо ҳоло метавонед ҳалқаи "for i := диапазони 10 {...}" -ро истифода баред.
- Дастгирии таҷрибавӣ (GOEXPERIMENT=rangefunc) барои функсияҳои диапазон ба ҳалқаҳо илова карда шудааст, ки ба шумо имкон медиҳад, ки функсияро ҳамчун итератор муайян кунед. Масалан, "барои i, x := slices диапазон. Ба ақиб(ҳо) {...}"
- Масъалаи дерина бо ҳалқаҳо ҳал карда шуд, ки боиси зангҳо ба корутинҳо (горутинҳо) барои мубодилаи тағирёбандаҳои давр дар байни такрорҳо гардид. Масалан, арзишҳои код := []сатр{"a", "b", "c"} барои _, v := арзишҳои диапазон { go func() { fmt.Println(v) анҷом дода шуданд < - true }() } акнун "a", "b" ва "c" -ро мебарорад, на танҳо "c", мисли пештара.
- Идоракунии хотира дар вақти корӣ оптимизатсия карда шуд, ки ин боиси афзоиши 1-3% ва коҳиши истеъмоли хотира дар аксари барномаҳо 1% гардид.
- Корҳо оид ба ворид намудани оптимизатсияҳо дар компилятор дар асоси натиҷаҳои профилсозии код (PGO - Optimization-profile-guided), ки имкон медиҳад, бо назардошти хусусиятҳои ҳангоми иҷрои барнома муайяншуда идома ёфт. Дар версияи нав, компилятор асбобҳои девиртуализатсияро барои иваз кардани зангҳои ғайримустақими усулҳои гуногун бо иҷрои блокҳои васеъшудаи дохилӣ истифода мебарад.
- Вақте ки PGO фаъол карда шуд, тағироти иловашуда иҷрои аксари барномаҳоро 2-14% беҳтар кард.
- Таҷрибаи таҷрибавӣ (GOEXPERIMENT=newinliner) татбиқи такмилёфтаи механизми дохилкунии занг ба компилятор илова карда шуд, ки бо истифода аз эвристика барои ҷудо кардани амалиёти муҳим ва номуҳим.
- Бастаи "math/rand/v2" ба китобхонаи стандартӣ илова карда шудааст, ки API-и ҳамаҷониба пешниҳод мекунад ва алгоритмҳои тезтарро барои тавлиди рақамҳои псевдо-тасодуфӣ истифода мебарад.
- Бастаи net/http.ServeMux қобилияти муайян кардани усулҳо ва ниқобҳоро дар қолабҳо илова кардааст, масалан, қолаби "GET /static/{id}/" ба дархостҳо бо усули HTTP "GET" татбиқ карда мешавад ва арзиши сегменти дуюми роҳи дархостшуда дар идентификатор " id".
- Бастаи пойгоҳи додаҳо/sql барои навъи Null[T] дастгирии илова кардааст, ки ба шумо имкон медиҳад сутунҳоеро скан кунед, ки метавонанд NULL бошанд. Функсияи Concat ба бастаи буридаҳо барои якҷоя кардани буридаҳои сершумори ҳама гуна намудҳо илова карда шуд.
- Дар фармонҳои кор бо фазои корӣ (маҷмӯаи модулҳо) метавон директорияи «фурӯшанда»-ро истифода бурд, ки вобастагӣ ба мундариҷаи фазои корӣ дорад. Феҳрист ҳангоми иҷрои фармони "рав ба фурӯшанда кор" сохта мешавад ва дар фармонҳои созанда ҳангоми танзими опсияи "-mod=vendor" истифода мешавад (агар директорияи фурӯшанда мавҷуд бошад, ба таври нобаёнӣ фаъол мешавад).
Тағирот дар рафтори фоидаовар.
- go get дигар берун аз модул дар реҷаи кӯҳнаи GOPATH дастгирӣ намешавад (яъне бо GO111MODULE=хомӯш). Фармонҳои дигари сохтан, ба монанди go build and go test, барои барномаҳои меросии GOPATH ба таври номуайян кор хоҳанд кард.
- go mod init дигар кӯшиш намекунад, ки талаботи модулро аз файлҳои конфигуратсия барои дигар асбобҳои фурӯшанда ворид кунад (ба монанди Gopkg.lock).
- go test -cover ҳоло ҷамъбасти фарогириро барои бастаҳои пӯшида, ки файлҳои санҷишии худро надоранд, чоп мекунад. Пеш аз Go 1.22, оё барои чунин баста гузориши муқоваи санҷишӣ меравед? mymod/mypack [файлҳои санҷишӣ нест]
ва ҳоло аз Go 1.22, функсияҳо дар бастаҳо ошкоршуда ҳисобида мешаванд: фарогирии mymod/mypack: 0.0% изҳорот Эзоҳ: агар баста умуман коди иҷрошаванда надошта бошад, мо наметавонем фоизи фарогириро гузориш диҳем; барои чунин бастаҳо, go test гузориш додани файлҳои санҷишии гумшударо идома медиҳад.
- Интерфейси веби асбоби пайгирӣ ҳамчун як қисми кор барои дастгирии трекери нав, ислоҳи баъзе мушкилот ва беҳтар кардани хондани саҳифаҳои гуногун каме нав карда шуд. Интерфейси веб ҳоло омӯхтани пайро дар намуди риштаи бехатар дастгирӣ мекунад. Намоишгари пайгирӣ ҳоло инчунин давомнокии пурраи тамоми зангҳои системаро нишон медиҳад. Ин беҳбудиҳо танҳо барои дидани паймоишҳое, ки аз ҷониби барномаҳое, ки дар Go 1.22 ё дертар сохта шудаанд, татбиқ мешаванд. Нашри оянда баъзе аз ин беҳбудҳоро ба пайҳое меорад, ки версияи кӯҳнаи Go истеҳсол кардааст.
- Вақти иҷро ҳоло метамаълумотҳои ҷамъоварии ахлотро дар асоси тип ба ҳар як объекти теппа наздиктар нигоҳ медорад. Ин тағирот инчунин сарбории хотираи аксари барномаҳои Go-ро тавассути нусхабардории метамаълумоти зиёдатӣ тақрибан 1% коҳиш медиҳад. Дар баъзе барномаҳо беҳбудӣ метавонад хурдтар бошад, зеро ин тағирот ҳудуди синфи андозаи тақсимкунандаи хотираро танзим мекунад, аз ин рӯ баъзе объектҳо метавонанд ба синфи калонтар интиқол дода шаванд. Таъсири ин тағирот дар он аст, ки суроғаҳои баъзе объектҳое, ки қаблан ҳамеша дар сарҳади 16-байтӣ (ё болотартар) мувофиқат мекарданд, акнун танҳо дар сарҳади 8-байтӣ мувофиқ карда мешаванд. Баъзе барномаҳое, ки дастурҳои васлкуниро истифода мебаранд, ки суроғаҳои хотираро зиёда аз 8 байт мувофиқат мекунанд ва ба рафтори пештараи ҳамоҳангсозии ҷудокунандаи хотира такя мекунанд, метавонанд ноком шаванд, аммо мо интизорем, ки чунин барномаҳо каманд. Чунин барномаҳоро бо GOEXPERIMENT=noallocheaders бо имкони баргаштан ба модели кӯҳнаи метамаълумотҳо ва барқарор кардани рафтори пештараи ҳамоҳангсозӣ сохтан мумкин аст, аммо соҳибони бастаҳо бояд коди монтажи худро навсозӣ кунанд, то аз фарзияи ҳамоҳангсозӣ канорагирӣ кунанд, зеро ин ҳалли муваққатӣ дар нашри оянда нест карда мешавад. .
- Тавре ки дар ёддоштҳои нашри Go 1.20 зикр шудааст, Go 1.22 ҳоло версияи ниҳоии Go 1.20 ё дертарро барои сохтани аввалия талаб мекунад. Мо интизорем, ки Go 1.24 барои сохтани аввал версияи ниҳоии Go 1.22 ё дертарро талаб кунад.
Аслӣ (go.dev)
Манбаъ: linux.org.ru
