Rilaxx tal-lingwa ta' programmar Go 1.18

Huwa ppreżentat ir-rilaxx tal-lingwa ta 'programmar Go 1.18, li qed tiġi żviluppata minn Google bil-parteċipazzjoni tal-komunità bħala soluzzjoni ibrida li tgħaqqad il-prestazzjoni għolja ta' lingwi kkumpilati ma 'vantaġġi bħal lingwi ta' scripting bħall-faċilità tal-kitba tal-kodiċi , veloċità ta 'żvilupp u protezzjoni ta' żball. Il-kodiċi tal-proġett huwa mqassam taħt il-liċenzja BSD.

Is-sintassi ta' Go hija bbażata fuq elementi familjari tal-lingwa C b'xi self mil-lingwa Python. Il-lingwa hija pjuttost konċiża, iżda l-kodiċi huwa faċli biex jinqara u jinftiehem. Il-kodiċi Go huwa miġbur f'fajls eżekutibbli binarji waħedhom li jaħdmu b'mod nattiv mingħajr ma tuża magna virtwali (profili, moduli ta 'debugging, u sottosistemi oħra ta' skoperta ta 'problemi ta' runtime huma integrati bħala komponenti ta 'runtime), li jippermetti prestazzjoni komparabbli ma' programmi C.

Il-proġett huwa inizjalment żviluppat b'attenzjoni għall-ipprogrammar multi-thread u tħaddim effiċjenti fuq sistemi multi-core, inkluż il-provvista ta 'mezzi fil-livell tal-operatur għall-organizzazzjoni tal-kompjuters paralleli u l-interazzjoni bejn metodi eżegwiti b'mod parallel. Il-lingwa tipprovdi wkoll protezzjoni integrata kontra blokki tal-memorja allokati żżejjed u tipprovdi l-abbiltà li tuża garbage collector.

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

Titjib ieħor:

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

Sors: opennet.ru

Żid kumment