Frigivelse af Go-programmeringssproget 1.18

Udgivelsen af ​​programmeringssproget Go 1.18 præsenteres, som udvikles af Google med deltagelse af fællesskabet som en hybridløsning, der kombinerer den høje ydeevne af kompilerede sprog med sådanne fordele ved scriptsprog som let at skrive kode , udviklingshastighed og fejlbeskyttelse. Projektkoden distribueres under BSD-licensen.

Go's syntaks er baseret på velkendte elementer fra C-sproget med nogle lån fra Python-sproget. Sproget er ret kortfattet, men koden er let at læse og forstå. Go-koden er kompileret til selvstændige binære eksekverbare filer, der kører indbygget uden brug af en virtuel maskine (profilering, fejlfindingsmoduler og andre undersystemer til registrering af runtime-problem er integreret som runtime-komponenter), hvilket giver mulighed for ydeevne, der kan sammenlignes med C-programmer.

Projektet er oprindeligt udviklet med henblik på multi-threaded programmering og effektiv drift på multi-core systemer, herunder at give operatør-niveau midler til at organisere parallel computing og interaktion mellem parallel-eksekverede metoder. Sproget giver også indbygget beskyttelse mod overallokerede hukommelsesblokke og giver mulighed for at bruge en skraldeopsamler.

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

Andre forbedringer:

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

Kilde: opennet.ru

Tilføj en kommentar