Найти в Дзене
2024 подписчика

👣 Go 1.20 is released!


Проект изначально разрабатывается с оглядкой на многопоточное программирование и эффективную работу на многоядерных системах, в том числе предоставляя реализованные на уровне операторов средства для организации параллельных вычислений и взаимодействия между параллельно выполняемыми методами. Язык также предоставляет встроенные средства защиты от выхода за допустимые области выделенных блоков памяти и обеспечивает возможность использования сборщика мусора.

▪Предоставлена поддержка оптимизации на основе результатов профилирования кода (PGO - Profile-guided optimization), позволяющей учитывать особенности, определяемые во время выполнения программы. Учёт профиля выполнения при сборке позволяет повысить производительность приложений на 3-4%. Для включения PGO в go build, go install и другие сборочные команды добавлена опция "-pgo".

▪Теперь можно передать флаг -C <dir>, чтобы задать рабочую директорию для подкоманды go;

▪В пакет unsafe добавлены функции SliceData, String и StringData для низкоуровневых манипуляций со срезами (массивы динамического размера) и строками (например, для преобразования области памяти, на которую ссылается указатель в строку с типом string и наоборот).

▪Правила преобразования типов расширены возможностью прямого преобразования из среза (slice) в массив.

▪В спецификации явно определён порядок сравнения элементов массива и полей структур.

▪Утилита cover расширена возможностью построения coverage-профиля для всей программы, а не только unit-тестов. Для формирования coverage-профиля в go build, go install и другие сборочные команды добавлена опция "-cover".

▪Утилита go избавлена от привязки к размещаемым в каталоге $GOROOT/pkg заранее скомпилированным пакетам стандартной библиотеки, что позволило исключить их из поставки и добиться уменьшения размера загружаемых данных. Пакеты стандартной библиотеки, как и обычные пакеты, теперь собираются по мере необходимости и кэшируются в сборочном кэше.

▪В команде go по умолчанию отключено применение пакета cgo на системах без инструментария для сборки кода на языке Си. На подобных системах теперь используются варианты пакетов стандартной библиотеки на языке Go, вместо использования предварительно скомпилированных пакетов.

▪В утилите vet реализованы дополнительные предупреждения о проблемах с используемыми в циклах переменными, выявленными при параллельном запуске тестов.

▪В стандартную библиотеку добавлен пакет crypto/ecdh с поддержкой обмена ключами на основе эллиптических кривых ECDH (Elliptic Curve Diffie-Hellmann).
Добавлен новый тип http.ResponseController для создания расширенных обработчиков HTTP-ответов.
В тип httputil.ReverseProxy добавлена функция Rewrite для изменения запроса.

▪Добавлена функция context.WithCancelCause, позволяющая отменить вызов с указанием определённой ошибки.
В тип os/exec.Cmd добавлены поля Cancel и WaitDelay, определяющие поведение при отмене контекста или завершении процесса.

▪В компиляторе и сборщике мусора снижено потребление памяти и проведена оптимизация производительности (прирост скорости достигает 2%).
Проведена работа по ускорению компиляции - сокращение времени сборки может достигать 10%.

▪Добавлена поддержка платформы FreeBSD на системах с арихитектурой RISC-V (GOOS=freebsd, GOARCH=riscv64).

▪ go build и go install и некоторые другие команды принимают новый флаг --pgo, который включает profile-guided optimization, а также флаг --cover.


👣 Go 1.20 is released!
2 минуты