Derxistina zimanê bernamenûsê Go 1.18

Serbestberdana zimanê bernamenûsê Go 1.18, ku ji hêla Google ve bi beşdariya civatê ve wekî çareseriyek hîbrîd tê pêşve xistin, ku performansa bilind a zimanên berhevkirî bi avantajên weha yên zimanên nivîsandinê re wekî hêsaniya nivîsandina kodê vedihewîne, tê pêşkêş kirin. , leza pêşveçûn û parastina çewtiyê. Koda projeyê di bin lîsansa BSD de tê belav kirin.

Hevoksaziya Go li ser hêmanên naskirî yên zimanê C-yê bi hin deynên ji zimanê Python-ê ve girêdayî ye. Ziman pir kurt e, lê kod hêsan e ku meriv were xwendin û fêm kirin. Koda Go-yê di pelên îcrakar ên binaryê yên serbixwe de ku bi xwemalî bêyî karanîna makîneyek virtual dimeşin (profilkirin, modulên debugkirinê, û binepergalên din ên tespîtkirina pirsgirêka xebitandinê wekî hêmanên dema xebitandinê têne yek kirin) têne berhev kirin, ku destûrê dide performansa ku bi bernameyên C re were berhev kirin.

Proje di destpêkê de bi çavek bernamesaziya pir-mijarî û xebata bikêrhatî ya li ser pergalên pir-bingehîn, di nav de peydakirina rêgezên di asta operatorê de ji bo organîzekirina hesabkirina paralel û danûstendina di navbera rêbazên paralel-rêveberî de tête pêşve xistin. Ziman di heman demê de parastina çêkirî li hember blokên bîranînê yên zêde veqetandî peyda dike û şiyana karanîna berhevkerek çopê peyda dike.

В новой версии добавлена поддержка обобщённых функций и типов (дженериков), при помощи которых разработчик может определить и использовать функции, предназначенные для работы сразу с несколькими типами. Также предоставлена возможность использования интерфейсов для создания комбинированных типов, охватывающих несколько типов данных. Поддержка дженериков реализована без нарушения обратной совместимости с существующим кодом. // Суммирование значений набора, работающее для типов 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 }

Pêşveçûnên din:

  • В штатный инструментарий интегрированы утилиты для 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.

Source: opennet.ru

Add a comment