Выпуск языка программирования Go 1.27
После шести месяцев разработки представлен релиз языка программирования Go 1.27, развиваемого компанией Google при участии сообщества. Язык сочетает высокую производительность, свойственную компилируемым языкам, с такими достоинствами скриптовых языков, как простота написания кода, высокая скорость разработки и защита от ошибок. Код проекта распространяется под лицензией BSD.
Синтаксис Go основан на привычных элементах языка Си с отдельными заимствованиями из языка Оберон. Язык достаточно лаконичен, но при этом код легко читается и воспринимается. Код на языке Go компилируется в обособленные бинарные исполняемые файлы, выполняемые нативно, без использования виртуальной машины (модули профилирования, отладки и другие подсистемы выявления проблем на этапе выполнения интегрируются в виде runtime-компонентов), что позволяет добиться производительности, сопоставимой с программами на языке Си.
Проект изначально разрабатывается с оглядкой на многопоточное программирование и эффективную работу на многоядерных системах. Например, на уровне операторов реализованы средства для организации параллельных вычислений и взаимодействия между параллельно выполняемыми методами. Язык также предоставляет встроенные средства защиты от выхода за границы буфера и обеспечивает возможность использования сборщика мусора.
Среди изменений в новом выпуске:
- Реализована поддержка обобщённых (generic) методов, позволяющих объявлять собственные параметры типов и добавлять обобщённые функции непосредственно в пространство имён конкретного типа данных, без объявления на уровне всего пакета. Например, вместо раздельного объявления методов для каждого типа теперь можно использовать один обобщённый метод для всех типов:
// Было func (r *Rand) Int32N(n int32) int32 func (r *Rand) Int64N(n int64) int64 func (r *Rand) IntN(n int) int // Стало func (r *Rand) N[Int intType](n Int) Int
- При инициализации структур в качестве ключа разрешено использовать любой допустимый селектор полей, что позволяет напрямую инициализировать поля вложенных или встроенных структур:
type Habitat struct { Burrow string } type Gopher struct { Name string Habitat // встроенная структура } g := Gopher{ Name: "Gopher", Burrow: "Burrow #42", } - Расширен механизм автоматического вывода типов для функций, который теперь применяется во всех контекстах присвоения переменной, что позволяет использовать обобщённые (generic) функции без явного указания типов аргументов.
func GenericFormatter[T any](v T) string { return fmt.Sprintf("value: %v", v) } type IntFormatter func(int) string formatters := []IntFormatter{GenericFormatter} fn := IntFormatter(GenericFormatter) ch := make(chan IntFormatter, 1) ch ‹- GenericFormatter - В команду «go fix» добавлены новые модернизаторы кода: atomictypes, embedlit, slicesbackward и unsafefuncs для переписывания устаревших конструкций atomic, упрощения объявления встроенных структур, использования slices.Backward при переборе срезов, и замене конструкций с unsafe.Pointer на более безопасные варианты.
В команде «go doc» реализована поддержка запросов «package@version», например, «go doc example.com/pkg@v1.2.3».
Повышена эффективность выделения памяти для мелких объектов, размером менее 80 байт. В приложениях, интенсивно создающих мелкие объекты оптимизация приводит к повышению производительности примерно на 1%.
В пакет runtime/pprof добавлен профиль goroutineleak для автоматического определения постоянно заблокированных сопрограмм.
- Добавлен пакет encoding/json/v2 с новой реализацией функций для обработки данных в формате JSON.
Добавлен пакет crypto/mldsa с реализацией постквантового алгоритма формирования цифровых подписей ML-DSA (FIPS 204).
Добавлен пакет uuid для генерации и разбора UUID-идентификаторов.
Добавлены пакеты simd и simd/archsimd с экспериментальной поддержкой распараллеливания выполнения операций над данными c использованием процессорных инструкций SIMD (Single Instruction, Multiple Data).
Источник: http://www.opennet.ru/opennews/art.shtml? num=66095
© OpenNet
