Выпуск языка программирования 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