LINUX.ORG.RU

Go 1.26

 , ,

Go 1.26

0

4

После полугода разработки состоялся выпуск 1.26 компилятора и стандартной библиотеки языка программирования Go.

Основные изменения:

  • Встроенная новая функция, создающая новую переменную, позволяет использовать в качестве операнда выражение, указывающее начальное значение переменной. Простой пример такого изменения — это код, подобный этому:
    x := int64(300)
    ptr := &x
    

    Можно упростить до:
    ptr := new(int64(300))
    
  • Обобщенные типы могут ссылаться сами на себя в собственном списке параметров типа. Это изменение упрощает реализацию сложных структур данных и интерфейсов.

Улучшение производительности:

  • Экспериментальный сборщик мусора Green Tea теперь включен по умолчанию.
  • Накладные расходы на CGO были сокращены примерно на 30%.
  • Компилятор может выделять резервную память для Slice-структур в стеке в большем количестве ситуаций, что повышает производительность.

Инструментарий:

  • Команда go fix была полностью переписана с использованием фреймворка analysis и теперь включает в себя несколько десятков «модернизаторов», которые предлагают безопасные исправления, помогающие вашему коду использовать преимущества новых возможностей языка и стандартной библиотеки.

Добавлены экспериментальные дополнения, доступные только при явном включении:

  • Пакет archsimd для доступа к архитектурно-зависимым операциям SIMD. На данный момент поддерживается только AMD64.
  • Пакет secret со вспомогательными функциями для обнуления памяти.
  • В пакет профилирования pprof добавлена поддержка опции GOEXPERIMENT=goroutineleakprofile для обнаружения утечек goroutine.


>>> Полный список изменений

>>> Подробности на go.dev/blog

★★★★★

Проверено: dataman ()
Последнее исправление: dataman (всего исправлений: 9)
Ответ на: комментарий от Lusine

Конечно же есть.

p1 = [1]
p2 = p1
p2[0] = 2
print(p1[0])

p1 и p2 это указатели, которые указывают на один и тот же массив.

vbr ★★★★★
()
Ответ на: комментарий от Lusine

Как сборщик мусора сообщает мне, какие указатели уже висят?

Сборщик мусора никому ничего не сообщает. Он просто собирает мусор, т.е. данные, на которые нет указателей, достижимых из корневых источников.

vbr ★★★★★
()
Последнее исправление: vbr (всего исправлений: 1)
Ответ на: комментарий от Lusine

Словами жонглировать можно сколько угодно, суть предмета от этого не меняется. Ты можешь присваивание называть биндингом, указатель ссылкой, структуру объектом, но суть остаётся ровно той же.

vbr ★★★★★
()
Ответ на: комментарий от ptah_alexs

Теперь понятно, сборщик мусора таки анализирует указатели, чтобы тут не говорили, а пока он это не закончит, все нити в программе стоят, а иначе никак. Это пипец какой урон в производительности.

Lusine
()
Ответ на: комментарий от Lusine

Откуда он знает сколько копий указателей в программе?

Алгоритм типового сборщика мусора заключается в том, что он останавливает программу, находит корневые источники данных (глобальные переменные, стеки запущенных потоков, может быть ещё что-то) и движется по ним, рекурсивно помечая все достижимые области памяти. После этого всё, что осталось, считается мусором и удаляется так или иначе.

Есть и другие варианты сборки мусора, к примеру умные указатели со счётчиком, они менее универсальны, т.к. не освобождают закольцованные структуры, но зато просты в реализации.

vbr ★★★★★
()
Ответ на: комментарий от Lusine

Да, традиционно сборщик мусора останавливает всю программу на время сборки. Существуют более продвинутые алгоритмы, но в любом случае сборка мусора это непредсказуемая пауза.

Общая пропускная способность программы с хорошим сборщиком мусора, как правило, выше, чем ручная сборка мусора, так что урона в производительности тут нет. Но могут страдать некоторые метрики, к примеру если тебе надо что-то около реалтаймовое, тут сборка мусора плохо применима.

Грубо говоря со сборкой мусора у тебя выше p99 но ниже p999.

vbr ★★★★★
()
Ответ на: комментарий от vbr

биндинг это присвоение имени сторадж, а ассигмент - это изменение сторадж. Чувствуешь разницу?

Lusine
()
Ответ на: комментарий от vbr

А зачем тогда сырые указатели? В С понятно, для скорости, а тут их на каждый чих обнюхивает сборщик мусора, какя уж тут скорость.

Lusine
()
Ответ на: комментарий от vbr

Да счаз. Про кастомные аллокаторы в плюсах слышал? Там вся работа памяти оптимизирована под конкретные задачи.

Lusine
()
Ответ на: комментарий от Lusine

Я уже написал, что указатели есть во всех языках программирования. Указатели не бывают «сырыми» или «варёными», они все одинаковые.

Скорость у Go неплохая.

vbr ★★★★★
()
Ответ на: комментарий от vbr

Вот например провожу интервью и для простого GET запроса и обработки данных в питоне и жс делается функция в 10 строчек, на джаве создают 3 класса для фабрики запросов, запускателя запросов и маппинга структуры ответа, потом еще куча проблем бывает с тем чтобы ответ от апи привести к нужному типу.

loz ★★★★★
()
Последнее исправление: loz (всего исправлений: 1)
Ответ на: комментарий от loz

Держи код на Java в 3 строчки.

var client = newHttpClient();
var request = HttpRequest.newBuilder().uri(uri).GET().build();
var response = client.send(BodyHandlers.ofString());
vbr ★★★★★
()
Ответ на: комментарий от vbr

Если они одинаковые, то в С это адрес переменной который можно вывести на печать printf, как в питоне такое сделать

Lusine
()

Встроенная новая функция

Тут речь про new(), а не про новую функцию

Metotron
()
Последнее исправление: Metotron (всего исправлений: 1)
Ответ на: комментарий от seiken

В гошный рантайм упираются только те, кто на нем не пишут. Остальные просто решают рабочие вопросы.

mrdeath ★★★★★
()
Ответ на: комментарий от vbr

А сколько эксепшинов выбросит все это? :) там ещё наверное 300 строк будет :) ну и я уже молчу скоро памяти это все сьест

mrdeath ★★★★★
()
Последнее исправление: mrdeath (всего исправлений: 1)
Ответ на: комментарий от mrdeath

А сколько эксепшинов выбросит все это? :)

Не больше, чем в питоне.

там ещё наверное 300 строк будет :)

Зачем? Ни одной не будет в обычном коде.

ну и я уже молчу скоро памяти это все сьест

А ты не молчи, просвети нас, тёмных. Проведи сравнительный анализ под нагрузкой. Я думаю, что раз в 10 меньше, чем в питоне. Последний раз, когда я с этим экспериментировал, веб сервер на жаве я запускал в 16 MB. При этом питон в кластере постоянно жрёт по 5 гигабайтов рамы. Не знаю, куда ему столько?

vbr ★★★★★
()
Последнее исправление: vbr (всего исправлений: 1)
Ответ на: комментарий от mrdeath

Ну штуки 4 эксепшенов выбросит. А что не так с памятью? Обычная работа с потоками и какая-нибудь небольшая сериализация.

kaldeon
()
Ответ на: комментарий от loz

Такое можно и на PHP наворотить и на Go. Не раз видел. Джава в этом плане даже будет лучше: у неё устоявшийся, проверенный временем, обработанный напильником туллинг. По этой причине у джавы нет конкурентов в энтерпрайзе и ещё не скоро появятся.

kaldeon
()
Ответ на: комментарий от FishHook

нет, не запрещено

Да, я уже уточнил этот момент позже.

компилятор не может разрезолвить адрес временного значения

Это запрещено нарочно.

thegoldone ★★★
()
Ответ на: комментарий от bernd

Так не в сеть же, а в гугл. Там будут хранить за семью замками, в обезличенном и обезжиренном виде. Тренировать нейросети на благо человечества.

vbr ★★★★★
()
Ответ на: комментарий от vbr

пусть пишут свой и обучают сколько хотят свои нейросети. или бабок за мой предложат.

bernd ★★★★★
()
Последнее исправление: bernd (всего исправлений: 1)
Ответ на: комментарий от splinter

Есть огромная разница между Zig и Sieg. Это я вам как подданый отвечаю.

lefsha
()
Ответ на: комментарий от Lusine

Из этого не следует, что аллокатор будет лучше GC с т.з. throughput.

Кроме того, много ты за свою жизнь написал качественных аллокаторов промышленного уровня?

kaldeon
()
Последнее исправление: kaldeon (всего исправлений: 1)
Ответ на: комментарий от Lusine

сборщик мусора таки анализирует указатели, чтобы тут не говорили

Никто не говорил, что GC не трогает указатели.

пока он это не закончит, все нити в программе стоят, а иначе никак

Почему никак, есть конкурентные подходы.

Это пипец какой урон в производительности.

Я тебя удивлю, но есть ОС со сборкой мусора — Оберон. Причём это была ОС, созданная с принципиальной целью экономии ресурсов, как ответ начавшемуся в тот период ожирению систем. И ничо, не пипец, в своей области до сих пор нет равных.

ГЦ как инструмент для макак — это бессмысленный миф, который ещё до сих пор почему-то не умер.

kaldeon
()
Последнее исправление: kaldeon (всего исправлений: 3)
Ответ на: комментарий от ugoday

P.S. Шах и мат, атеисты, кстати.

Природа действия определяется сущностями, которые действуют, а не чьей-то волей.

Подобного рода аргументы, кстати, не редкость. Например, какой-то философ-эмпирицист (казалось бы) спрашивал: какая сила берёт множество независимых качеств, таких как красность, твёрдость и т.д., и склеивает их в единый объект?

kaldeon
()
Ответ на: комментарий от kaldeon

Природа действия определяется сущностями, которые действуют, а не чьей-то волей.

Паскаль, Модула и Оберон вышли из чата.

ugoday ★★★★★
()
Ответ на: комментарий от ugoday

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

kaldeon
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.