Go бағдарламалау тілі 1.19 шығарылымы

Go 1.19 бағдарламалау тілінің шығарылымы ұсынылды, оны Google қауымдастықтың қатысуымен құрастырылған тілдердің жоғары өнімділігін кодты жазудың қарапайымдылығы сияқты сценарий тілдерінің артықшылықтарымен біріктіретін гибридті шешім ретінде әзірлейді. , даму жылдамдығы және қателерден қорғау. Жоба коды BSD лицензиясы бойынша таратылады.

Go синтаксисі Си тілінің таныс элементтеріне негізделген, Python-дан кейбір қарыздар. Тіл салыстырмалы түрде қысқа, бірақ оқуға және түсінуге оңай. Go коды виртуалды машинаны қажет етпей (профильдеу, жөндеу және басқа орындалу уақытының ақаулықтарын анықтау ішкі жүйелері орындалу уақыты құрамдастары ретінде біріктірілген) C бағдарламаларымен салыстырылатын өнімділікке қол жеткізе отырып, жергілікті түрде жұмыс істейтін оқшауланған екілік орындалатын файлдарға жинақталған.

Жоба бастапқыда көп ағынды бағдарламалауды және көп ядролы жүйелерде тиімді жұмыс істеуді, соның ішінде параллельді есептеулерді ұйымдастыру және параллель орындалатын әдістер арасындағы өзара әрекеттесу үшін оператор деңгейінде іске асырылатын құралдарды қамтамасыз етумен әзірленген. Сондай-ақ тіл бөлінген жад блоктарының асып кетуіне қарсы кірістірілген қорғанысты қамтамасыз етеді және қоқыс жинағышты пайдалану мүмкіндігін береді.

Жаңа шығарылымдағы өзгерістердің арасында:

  • Алдыңғы шығарылымда қосылған жалпы функциялар мен түрлерге (генериктерге) қолдауды нақтылау бойынша жұмыс жүргізілді. Бұл әзірлеушілерге бірнеше түрмен бір уақытта жұмыс істеуге арналған функцияларды анықтауға және пайдалануға мүмкіндік береді. Генериктерді пайдаланатын кейбір бағдарламалардың өнімділігін 20%-ға дейін арттыра отырып, оңтайландырулар енгізілді.
  • Құжаттама түсініктемелері енді сілтемелерді, тізімдерді және тақырыптарды анықтауға арналған қарапайым синтаксисті қолдайды. gofmt утилитасы енді API құжаттамасының түсініктемелерінің кеңейтілген мүмкіндіктерін ескеретін пішімдеуді қолдайды.
  • Go жады үлгісі дәйекті атомдық мәндерді қолдамайтын C, C++, Java, JavaScript, Rust және Swift үлгілеріне сәйкес болу үшін қайта қаралды. Атомдық мәндерді пайдалануды жеңілдету үшін синхрондау/атомдық бумада atomic.Int64 және atomic.Pointer[T] сияқты жаңа түрлер енгізілді. Бұл жад үлгісінің өзгерісі бар кодпен үйлесімділікке әсер етпейді.
  • Қауіпсіздікті жақсарту үшін os/exec модулі PATH ортасының айнымалы мәнін кеңейту кезінде салыстырмалы жолдарды қарастырмайды (мысалы, орындалатын файлдың жолын анықтау кезінде ағымдағы каталог енді тексерілмейді).
  • Қоқыс жинағыш енді жинақ өлшемін шектеу және жадты агрессивті түрде қалпына келтіру арқылы қолданылатын жұмсақ жад шектеулерін қолдайды. Бұл жадты тұтынудың барлық жағдайларда көрсетілген шектерде сақталуына кепілдік берілмейтінін білдіреді. Жұмсақ шектеулер бекітілген жад өлшемі бар контейнерлерде жұмыс істейтін бағдарламаларды оңтайландыру үшін пайдалы болуы мүмкін.
  • Unix тәрізді жүйелерді (aix, android, darwin, dragonfly, freebsd, hurd, illumos, ios, linux, netbsd, openbsd, solaris) сүзу үшін «go:build» жолдарында пайдалануға болатын жаңа «unix» құрастыру шектеуі қосылды.
  • Көптеген өнімділікті оңтайландырулар енгізілді. Көшірілген деректердің өлшемін азайту үшін корутиндік стек өлшемін динамикалық орнатуға қолдау қосылды. Unix жүйелерінде қосымша файл дескрипторларын автоматты түрде пайдалану жүзеге асырылды (RLIMIT_NOFILE шегін арттыру). x86-64 және ARM64 жүйелерінде үлкен коммутатор мәлімдемелерін жылдамдату үшін үлкен коммутатор мәлімдемелерін 20% жылдам өңдеуге мүмкіндік беретін көшу кестелері енгізілді. Riscv64 жүйелерінде функция аргументтерін процессор регистрлері арқылы жіберу жүзеге асырылды, нәтижесінде өнімділік шамамен 10% артты.
  • 64 биттік LoongArch архитектурасына (GOARCH=loong64) негізделген Loongson процессорлары бар жүйелердегі Linux орталарына эксперименттік қолдау қосылды.

Ақпарат көзі: opennet.ru