[ON] Выпуск языка программирования Go 1.27

Обсуждение новостей, соответствующих тематике форума

Модератор: Модераторы разделов

Аватара пользователя
rssbot
Бот
Сообщения: 6000
ОС: gnu/linux

[ON] Выпуск языка программирования Go 1.27

Сообщение rssbot »

После шести месяцев разработки представлен релиз языка программирования 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 для автоматического определения постоянно заблокированных сопрограмм (goroutine).
  • Добавлен пакет encoding/json/v2 с новой реализацией функций для обработки данных в формате JSON.
  • Добавлен пакет crypto/mldsa с реализацией постквантового алгоритма формирования цифровых подписей ML-DSA (FIPS 204).
  • Добавлен пакет uuid для генерации и разбора UUID-идентификаторов.
  • Добавлены пакеты simd и simd/archsimd с экспериментальной поддержкой распараллеливания выполнения операций над данными c использованием процессорных инструкций SIMD (Single Instruction, Multiple Data).


Источник: https://www.opennet.ru/opennews/art.shtml?num=66095
(opennet.ru, основная лента)
Последний раз редактировалось rssbot 20.08.2026 07:04, всего редактировалось 1 раз.
Причина: Updated upstream
Спасибо сказали: