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

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

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

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

В новой версии добавлена поддержка обобщённых функций и типов (дженериков), при помощи которых разработчик может определить и использовать функции, предназначенные для работы сразу с несколькими типами. Также предоставлена возможность использования интерфейсов для создания комбинированных типов, охватывающих несколько типов данных. Поддержка дженериков реализована без нарушения обратной совместимости с существующим кодом. // Суммирование значений набора, работающее для типов int64 и float64 func SumIntsOrFloats[K comparable, V int64 | float64](m map[K]V) V { var s V for _, v := range m { s += v } return s } // Другой вариант с обобщённым определением типа: type Number interface { int64 | float64 } func SumNumbers[K comparable, V Number](m map[K]V) V { var s V for _, v := range m { s += v } return s }

Басқа жақсартулар:

  • В штатный инструментарий интегрированы утилиты для fuzzing-тестирования кода. В ходе fuzzing-тестировании осуществляется генерация потока всевозможных случайных комбинаций входных данных и фиксация возможных сбоев в процессе их обработки. Если какая-то последовательность приводит к краху или не соответствует ожидаемой реакции, то такое поведение с высокой вероятностью свидетельствует об ошибке или уязвимости.
  • Добавлена поддержка могомодульных рабочих пространств, позволяющих выполнять команды сразу для нескольких модулей, что позволяет одновременно собирать и запускать код в нескольких модулях.
  • Проведена значительная оптимизация производительности для систем на базе процессоров Apple M1, ARM64 и PowerPC64. Включена возможность использования регистров вместо стека для передачи аргументов в функции и возврата результата. Улучшено inline-развёртывание циклов компилятором. Полностью переделана проверка типов в компиляторе. В отдельных тестах по сравнению с прошлым выпуском отмечается повышение производительности кода на 20%, но сама компиляция стала выполняться примерно на 15% дольше.
  • В runtime повышена эффективность возвращения освобождённой памяти операционной системе и улучшена работа сборщика мусора, поведение которого стало более предсказуемым.
  • В стандартную библиотеку добавлены новые пакеты net/netip и debug/buildinfo. В клиентском коде по умолчанию отключена поддержка TLS 1.0 и 1.1. В модуле crypto/x509 прекращена обработка сертификатов с подписью на базе хэша SHA-1.
  • Подняты требования к окружению в Linux, для работы теперь необходимо наличие ядра Linux как минимум версии 2.6.32. В следующем выпуске аналогичные изменения ожидаются для FreeBSD (будет прекращена поддержка ветки FreeBSD 11.x) и для рабты потребуется наличие как минимум FreeBSD 12.2.

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

пікір қалдыру