„Go“ programavimo kalbos išleidimas 1.18

Pristatomas Go 1.18 programavimo kalbos leidimas, kurį „Google“ kuria dalyvaujant bendruomenei kaip hibridinį sprendimą, kuris sujungia aukštą kompiliuotų kalbų našumą su tokiais skriptų kalbų pranašumais kaip kodo rašymo paprastumas. , kūrimo greitis ir apsauga nuo klaidų. Projekto kodas platinamas pagal BSD licenciją.

„Go“ sintaksė pagrįsta pažįstamais C kalbos elementais su kai kuriomis „Python“ kalbos skolinėmis. Kalba gana glausta, tačiau kodą lengva skaityti ir suprasti. „Go“ kodas yra sukompiliuotas į atskirus dvejetainius vykdomuosius failus, kurie veikia natūraliai, nenaudojant virtualios mašinos (profiliavimo, derinimo moduliai ir kiti vykdymo laiko problemų aptikimo posistemiai yra integruoti kaip vykdymo laiko komponentai), todėl našumas yra panašus į C programas.

Iš pradžių projektas buvo sukurtas atsižvelgiant į kelių gijų programavimą ir efektyvų daugelio branduolių sistemų veikimą, įskaitant operatoriaus lygio priemones, skirtas organizuoti lygiagretųjį skaičiavimą ir lygiagrečiai vykdomų metodų sąveiką. Kalba taip pat suteikia įmontuotą apsaugą nuo per daug paskirstytų atminties blokų ir suteikia galimybę naudoti šiukšlių rinktuvą.

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

Kiti patobulinimai:

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

Šaltinis: opennet.ru

Добавить комментарий