Выпуск языка программирования Go 1.22

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 3252
Зарегистрирован: 20.08.2022

#

Выпуск языка программирования Go 1.22
Дата публикации:Wed, 07 Feb 2024 09:15:44 +0300




Представлен релиз языка программирования Go 1.22, который развивается компанией Google при участии сообщества как гибридное решение, сочетающее высокую производительность компилируемых языков с такими достоинствами скриптовых языков, как лёгкость написания кода, быстрота разработки и защищённость от ошибок. Код проекта распространяется под лицензией BSD.



Синтаксис Go основан на привычных элементах языка Си с отдельными заимствованиями из языка Оберон. Язык достаточно лаконичен, но при этом код легко читается и воспринимается. Код на языке Go компилируется в обособленные бинарные исполняемые файлы, выполняемые нативно, без использования виртуальной машины (модули профилирования, отладки и другие подсистемы выявления проблем на этапе выполнения интегрируются в виде runtime-компонентов), что позволяет добиться производительности, сопоставимой с программами на языке Си.



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



Среди изменений в новом выпуске:
  • В циклы "for" добавлена поддержка определения диапазонов из целых чисел, например, для перебора значений с 0 до 9 теперь можно использовать цикл "for i := range 10 {...}".
    В циклы "for" добавлена экспериментальная (GOEXPERIMENT=rangefunc) поддержка функций определения диапазона, позволяющая указывать функцию в качестве итератора. Например, "for i, x := range slices.Backward(s) {...}"

    Решена давняя проблема с циклами "for", приводившая при вызове сопрограмм (goroutine) к совместному использованию переменных цикла в разных итерациях. Например, код

    values := []string{"a", "b", "c"}
    for _, v := range values {
    go func() {
    fmt.Println(v)
    done <- true
    }()
    }

    теперь будет выводить "abc", а не "ccc", как было раньше.


    Проведена оптимизация работы с памятью в runtime, которая привела к повышению производительности на 1-3% и снижению потребления памяти в большинстве приложений на 1%.

    Продолжена работа по задействованию в компиляторе оптимизаций на основе результатов профилирования кода (PGO - Profile-guided optimization), позволяющих учитывать особенности, определяемые во время выполнения программы. В новой версии в компиляторе задействованы средства девиртуализации для замены непрямых вызовов различных методов на выполнение развёрнутых inline-блоков. При включении PGO добавленное изменение позволило повысить производительность большинства программ на 2-14%.

    В компилятор добавлена экспериментальная (GOEXPERIMENT=newinliner) улучшенная реализация механизма развёртывания (inlining) вызовов, использующая эвристику для разделения важных и второстепенных операций.

    В стандартную библиотеку добавлен пакет "math/rand/v2", в котором предложен более целостный API и задействованы более быстрые алгоритмы генерации псевдо-случайных чисел.

    В пакет net/http.ServeMux добавлена возможность указания методов и масок в шаблонах, например, шаблон "GET /static/{id}/" будет применён к запросам с HTTP-методом "GET" и сохранит значение второго сегмента запрошенного пути в идентификаторе "id".

    В пакет database/sql добавлена поддержка типа Null[T], позволяющего сканировать столбцы, которые могут применать значение NULL.

    В пакет slices добавлена функция Concat для слияния нескольких слайсов любого типа.

    В командах для работы с рабочими пространствами (коллекциями модулей) предоставлена возможность использования каталога "vendor", содержащего зависимости к содержимому рабочего пространства. Каталог создаётся при выполнении команды "go work vendor" и используется в сборочных командах при выставлении опции "-mod=vendor" (включает по умолчанию при наличии каталога vendor).


Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=60564

Жизнь за Нер'зула!

Ответить