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)
Ответ на: комментарий от kaldeon

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

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

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

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

а если задуматься - а на чем остальные две трети сидят ? :) придет дзен

cyrusmsk
()
Ответ на: комментарий от no-such-file

Ну так самые большие изменения были как раз в 7, т.е. переход с 5.6 на 7.0 был не таким гладким. Особенно это касалось работы с переменными (и массивами) по ссылке, чем очень любили обмазываться во времена 4 пыха.

Да, все так, но это было больше 10 лет назад.

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

Так то оно так, но если ты хочешь заработать денег, то PHP не лучший выбор. И проектов мало и зп слабые.

У меня в этом плане ошибка выжившего.

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

Есть два соображения, которыми я руководствуюсь. Первое, нельзя исключать, что собеседник ещё не дозрел до этой темы и ему ничего не объяснить, как не объяснить десятилетнему пареньку зачем Д’Артаньяну Констанция Буонасье, вот для чего она нужна, когда можно целыми днями скакать на лошадках и лупцеваться шпагами. Даже если это очень умный ребёнок, сейчас ничего не объяснить. Пройдёт пару лет и сам всё поймёт. А сейчас рано. Таким образом, отвечая вопросом на вопрос можно просто отмахнуться от назойливого собеседника и не терять зря время.

Второе и более важное: в геометрии нет царской дороги. Даже если ты очень-очень умный, всё равно нужно начать с «яблоко плюс яблоко будет два яблока» и идти шаг за шагом. Учитель может подсказать учебник. Учитель может проверить решение задачи. Но вынуть знания из своего мозга и вложить в чужой он не в силах. Этот путь нужно пройти самому. Так и тут, до некоторых ответов можно только додуматься самостоятельно. Любой внешний ответ отскочит от черепушки без всякого эффекта. Поэтому отвечать нужно на языке притч и наводящих вопросов.

Тем более, что как раз вопрос «а почему я хочу того, что хочу?» и стал для меня отправной точкой к моим текущим убеждениям. Может быть подойдёт и вам. А может для вас нужны другие вопросы. Здесь тоже можете ответить только вы сами.

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

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

Моё определение: душа — это сущность индивида, которой является его разум и базовые ценности.

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

Давайте я спрошу по-другому. У вас есть готовое определение понятию «душа», пусть и понятное только избранным?

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

зачем Д’Артаньяну Констанция Буонасье

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

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

Кроме того, всякое словарное определение неизбежно сводится к сепулькам и сепулению, зацикленных самих на себя. В случае физического мира цикл можно разорвать, просто подведя человека к предмету и сказав: „Вот эта штука у тебя в руках соответствует словарной статье «камень»“. В случае же более абстрактных материй нужно установить некую картину мира, в которой «душа», «сущность», «индивид», «разум» и «ценность» имеют смысл и находятся в опредённых отношениях между собой. Но установка этой картины — задача вопрошающего.

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

Я ее уже высказал.

Strict types прикручены впопыхах, для ограниченного набора типов, без какого-либо подхода к дизайну, чтобы сделать это универсальным.

В итоге всё как всегда в PHP: костыльки для частных случаев, которые не решают проблему в общем и целом. У языка ноль проектирования, это сборник костылей и велосипедов.

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

В вашей голове ни на секунду не возникла мысль что PHP –интерпретируемый язык и полные строгие типы ему сейчас как собаке пятая нога, потому что JIT только появился как оптимизация для горячих участков байткода OPCache. С дальнейшим развитием JIT компиляции будет добавлено больше возможностей в строгой типизации.

Те на лицо взрослый, зрелый подход планомерного развития и улучшения связанных частей системы без бега впереди паровоза который вы называете «подходом к дизайну».

Ваши сообщения показывают, что ваши знания о PHP застряли где-то в районе PHP 5. Оставаться на том уровне или эволюционировать – дело ваше.

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

взрослый, зрелый подход

Взрослый, зрелый подход - это проектирование перед реализацией, чем в PHP никогда и не пахло.

полные строгие типы ему сейчас как собаке пятая нога, потому что JIT только появился как оптимизация

Полная строгая типизация не зависит от JIT. Она нужна в первую очередь для проверки типов, а уже потом для оптимизации. Ничто не мешало сделать сначала первое, потом второе.

Ваши сообщения показывают, что ваши знания о PHP застряли где-то в районе PHP 5

Нет. Скорее, ты не понимаешь, что такое строгая типизация и зачем она нужна, просто изо всех сил защищаешь свою священную корову.

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

Нет. Скорее, ты не понимаешь, что такое строгая типизация и зачем она нужна

На этом можно закончить обсуждение, вы не хотите меня слышать, а у меня нет желания метать бисер.

Рассказывать архитектору что куда в типизации это как объяснять обезъяне что делать с бананом.

просто изо всех сил защищаешь свою священную корову.

Нет, просто я честен: PHP реально шагнул вперед. Для меня это один из десятка ЯП, на котором я постоянно пишу код и один из двух десятков ЯП которые я понимаю.

Я сторонник подхода «каждой задаче свой инструмент» поэтому у меня нет священных коров.

Может, вот так до вас дойдет:

// Без типов - OPCache должен генерировать универсальный код
function add($a, $b) {
    return $a + $b; // может быть int, float, string, array...
}
declare(strict_types=1);

// С типами - OPCache генерирует оптимизированный код, JIT делает быструю версию 
function add(int $a, int $b): int {
    return $a + $b; // гарантированно int, JIT может использовать CPU ADD, нет zval и тд
}
Obezyan
()
Последнее исправление: Obezyan (всего исправлений: 1)
Ответ на: комментарий от Obezyan

у меня нет желания метать бисер

Ты что-то путаешь. Мечу бисер здесь я, а ты изо всех сил отрицаешь реальность.

Рассказывать архитектору что куда в типизации это как объяснять обезъяне что делать с бананом.

Никакой ты не архитектор, с такими познаниями, не неси ерунды.

PHP реально шагнул вперед

Я не говорил, что он не шагнул. Я сказал, что его подход никак не поменялся.

С типами - OPCache генерирует оптимизированный код, JIT делает быструю версию

Повторяю еще раз, если еще не дошло: типы нужны не только для оптимизаций, но и для проверки.

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

слишком много тупости для одной пятницы

Если основной источник тупости - ты сам, то игнор тебя не спасет.

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

Strict types прикручены впопыхах, для ограниченного набора типов, без какого-либо подхода к дизайну

Этой цели изначально не было. Авторы языка не считают статическую типизацию приоритетом номер 1.

(С этой позицией можно не согласиться, но она вполне честная и обоснованная.)

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

Ну ты даже документацию ленишься прочитать что-ли?

id(object, /)

Return the “identity” of an object. This is an integer which is guaranteed to be unique and constant for this object during its lifetime. Two objects with non-overlapping lifetimes may have the same id() value.

CPython implementation detail: This is the address of the object in memory.

Вот чёрным по белому написано - адрес объекта в памяти.

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

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

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

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

Кроме того, именно Go по типизации будет на голову выше любого дин языка. Достаточно, чтобы отловить большинство ошибок.

В общем, закон убывающей отдачи.

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

программирование становится проще

Не становится.

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

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

именно Go по типизации будет на голову выше любого дин языка

Не уверен, что любого, но лучше чем питон (который я очень люблю, к слову) и пхп - это факт.

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

или

foo = 1
bar = foo
baz = bar
fii = 1

print id(foo)
print id(bar)
print id(baz)
print id(fii)

> 1532352
> 1532352
> 1532352
> 1532352

Почему у 3 разных переменных один адрес?

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

Потому что это не адрес, а идентификатор объекта. Как только значения переменных разойдутся, они превратятся в разные объекты. Это делается для экономии памяти.

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


In [1]: x = 10000000

In [2]: y = 10000000

In [3]: id(x)
Out[3]: 139403002651696

In [4]: id(y)
Out[4]: 139402992809264
liksys ★★★★
()
Ответ на: комментарий от liksys

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

Отсюда очевидно, что существует некий оптимальный балланс где усложнение системы типов только ухудшает работу. Где находится эта точка — человечество пока не нашло.

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

Проблему корректности они вообще никак не решают. Корректность по отношению к алгоритму требует математического доказательства.

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

Оно к ней приблизилось. Раст и прочие делают это правильно. Хаскель - это уже перебор.

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

Идти?

Иди. Не задерживайся тут.

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

Я ее уже высказал.

Нет, не высказал. Ты пересказал тот самый копиум.

Strict types прикручены впопыхах

Это просто пук в лужу. Давай конкретный пример: что именно плохо, почему, как это проявляется на практике с примером проблемного кода.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от kaldeon

Нет же, TDD отлавливает только то, что написано в тесте. Зачем противопоставлять тестирование и систему типов? Лучше когда у тебя есть оба инструмента.

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

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

php.ini - пока его не уберут вообще, я даже слышать про него не хочу.

chemistmail
()

Как я вижу священные войны и метания какашками в полном разгаре….

Тем кто пишет на golang - поздравляю (чет хорошее завезли) тем кому он не нравится - поздравляю (наверняка багов насыпали) тем кому пофиг - поздравляю (пиво и чипсы в пятницу - вечер удался) тем кому не пофиг - поздравляю (пофиг)

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

С пятницей господа инженеры.

chemistmail
()

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

Так что объявляется конкурс на лучшее поздравление юбиляру.

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

Не верь тому что написано, верь коду. Сегодня 3 часа угробил на документации по gwin от яндекса…. Один код, реализует 2 апи, и конфигурируется разными аннотациями… Поубывал бы….

chemistmail
()
Ответ на: комментарий от no-such-file

Нет, не высказал.

Нет, высказывал. Ты просто не понял.

Это просто пук в лужу.

Ты заблуждаешься. Выше всё достаточно подробно и понятно объяснено. Не понятно - перечитываешь еще раз, и задаешь конкретные вопросы.

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