воскресенье, 21 февраля 2021 г.

Релиз Go 1.16, runtime, компилятор

Среда времени исполнения (Runtime)

Новый пакет runtime/metrics представляет стабильный интерфейс для чтения метрик, определенных реализацией, из среды выполнения Go. Он заменяет существующие функции, такие как runtime.ReadMemStats и debug.GCStats, и является значительно более общим и эффективным.

Установка для переменной среды GODEBUG значения inittrace=1 теперь заставляет среду выполнения выдавать одну строку стандартной ошибки для каждого пакета init, суммируя время выполнения и выделение памяти. Эта трассировка может использоваться для поиска узких мест или снижения производительности Go при запуске. Документация GODEBUG описывает формат.

В Linux среда выполнения теперь по умолчанию немедленно освобождает память операционной системе (с использованием MADV_DONTNEED), а не лениво, когда операционная система испытывает нехватку памяти (с помощью MADV_FREE). Это означает, что статистика памяти на уровне процесса, такая как RSS, будет более точно отражать объем физической памяти, используемой процессами Go. Системам, которые в настоящее время используют GODEBUG=madvdontneed=1 для улучшения поведения мониторинга памяти, больше не нужно устанавливать эту переменную среды.

В Go 1.16 исправлено несоответствие между детектором гонки и моделью памяти Go. Детектор гонки теперь более точно следует правилам синхронизации каналов модели памяти. В результате теперь детектор может сообщать о ранее пропущенных гонках.

Компилятор

Компилятор теперь может встраивать функции с немаркированными циклами for, значениями методов и переключателями типов. Инлайнер также может обнаруживать больше косвенных вызовов, когда встраивание возможно.

Компоновщик (Linker)

Этот релиз включает в себя дополнительные улучшения компоновщика Go, снижающие использование ресурсов компоновщика (как времени, так и памяти) и повышающие надежность и удобство сопровождения кода. Эти изменения образуют вторую половину проекта с двумя релизами по модернизации компоновщика Go.

Изменения компоновщика в 1.16 распространяют улучшения 1.15 на все поддерживаемые комбинации архитектуры/ОС (улучшения производительности 1.15 были в основном сосредоточены на ОС на основе ELF и архитектурах amd64). Для репрезентативного набора больших программ Go компоновка на 20-25% быстрее, чем 1.15, и требует в среднем на 5-15% меньше памяти для linux/amd64 с большими улучшениями для других архитектур и ОС. Большинство двоичных файлов также меньше в результате более агрессивной обрезки символов.

В Windows go build -buildmode=c-shared теперь по умолчанию генерирует Windows ASLR DLL. ASLR можно отключить с помощью --ldflags=-aslr=false.


Читайте также:


Комментариев нет:

Отправить комментарий