LINUX.ORG.RU

Go 1.8

 ,


3

6

Представлен стабильный выпуск Go 1.8. Этот релиз содержит значительные улучшения производительности и изменения в стандартной библиотеке.

Бекенд компилятора, впервые представленный для x86_64 в Go 1.7, теперь применяется на всех архитектурах, что даст ощутимый прирост производительности. Благодаря этому, например, на 32-битных системах ARM программы для измерения производительности затрачивают на 20-30 % меньше процессорного времени. Для 64-битных x86-систем также сделаны некоторые улучшения производительности. Компилятор и компоновщик стали быстрее, по сравнению с Go 1.7 время компиляции должно уменьшиться примерно на 15 %.

Паузы сборки мусора в новом релизе должны стать значительно короче: как правило, ниже 100, и чаще, ниже 10 микросекунд.

Улучшения также коснулись и HTTP-сервера. Добавлена поддержка HTTP/2 Push, что позволит серверам заранее отправлять ответы клиенту и минимизировать задержки в сети. Добавлена поддержка мягкого завершения (graceful shutdown), когда сервер завершает работу после обработки всех своих текущих запросов.

В контекстах добавлен механизм лимитов времени и отмены. В Go 1.8 поддержка контекстов добавлена во многих частях стандартной библиотеки, включая пакеты database/sql и net, и в Server.Shutdown из пакета net/http.

Благодаря новой функции Slice в пакете sort, стало проще сортировать срезы. Например, следующим образом можно отсортировать срез структур по полю Name:

sort.Slice(s, func(i, j int) bool { return s[i].Name < s[j].Name })

Go 1.8 содержит много других улучшений и исправлений. Полный список изменений можно посмотреть в информации о выпуске Go 1.8.

Пользователи Go по всему миру собираются вместе на этой неделе, чтобы отпраздновать данный выпуск. Это стало доброй традицией в сообществе Go. Если вы не успели отпраздновать в этот раз, впереди ещё будет Go 1.9.

>>> Подробности

★★★★★

Проверено: leave ()

Вот когда сделают вменяемые ГУИ, ИДЕ, обёртки для популярных библиотек, будем праздновать. Пока годится только для сетевых макак.

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

Ну так его область применения изначально была - серверные сетевые приложения, асинхронные микросервисы. Иде есть от джетбреинс. Активно пилять интеграцию с си. Есть обертка для гтк, правда пока реализовано лишь 33% апи гтк, хотя с этим уже можно работать: https://mattn.github.io/go-gtk/

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

Си тоже закопать?

Ну вообще-то да, пора бы уже. Надеюсь, Rust таки закопает. Но пример C тут нерелевантен совершенно, C — это язык из 60-х годов прошлого века.

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

2017 а у нас все по таймерам и циклам

удачи таким девелоперам конечно

В Go любая фича, которую сложно реализовать, не реализуют. Так что нечему удивляться.

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

Импортят не из гита, а из директории. Одна директория - один пакет. Название импорта происходит от пути директории от корня GOPATH/src. Просто да, для удобства пакеты можно выкладывать в публичные репозитории, а го для удобства кладет их в директорию домен/название-репозитория. Это очень удобно и позволяет менеджить пакеты без пакетного менеджера вообще.

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

Паузы сборки мусора

2017 а у нас все по таймерам и циклам

А что в Java лучше? А в C++, Rust и даже в Си у кого-то new/delete, (как там в Расте), malloc()/free(), умеют в константное время?

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

Тут преимущество, что пример типовый, и однажды разобравшись можно читать остальные декларации (да и в go это поправили). А вот в расте...

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

Вот когда сделают вменяемые ГУИ, ИДЕ, обёртки для популярных библиотек, будем праздновать.

ИДЕ - это на вкус и цвет, а не должно быть у языка. К gcc (Си/С++/Фортран/Ада/D...) не идёт ИДЕ, и ничего.

Вот отсутствие более менее официальных (быстрых) обёрток для ГУИ-библиотек - это самый серьёзный минус.

А обёрток для других популярных библиотек довольно много: вон и для низкоуровневых вроде libusb есть. sqlite есть. А LAPACK/BLAS так вообще есть и как обёртка, и нативно.

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

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

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

Интересно, удастся ли им привнести свежий ветер в соревнование с алгоритмами и реализациями кучи. Ведь даже при ручном управлении памятью на практике нельзя брать и вызывать где нужно (и разрешается, конечно) new/delete, а нужно городить ещё и пул для кучи, ограничивая себя дополнительно.

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

свежий ветер в соревнование с алгоритмами и реализациями кучи

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

так микрософт делает на своих супертестах дотнета со статическим кодом

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

С одной стороны, это круто, когда можно объяснить компилятору подробно всё, что ты знаешь, а не заставлять его гадать. Но с другой стороны, если это делать так как в Си++ или вот и Расте тоже - то так не годится. Как сделать так, чтобы и подробно, но не многословно, это хороший вопрос. Лучше бы в Расте сначала на него ответили, а потом начали разработку - это было бы что-то! В go реализовали именно накопленный опыт.

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

В go реализовали именно накопленный опыт.

использовать перечисленные инклюды в исходнике в качестве либ и инклюд диров и не перечислять повторно компилятору?

привет джаве из 2000-го передавать или сам передаш?

lwx51033 ()

даст ощутимый прирост производительности.

Теперь оно быстрее Си ?

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

Либастрал подключили?

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

И сколько лет назад это было уже сделано? Ещё до выхода первого выпуска go? А в C 15 лет не было классов, а для их прикручивания соорудили отдельный язык, почти совместимый с исходным. Что нам в 2022 году ждать go++ с поддержкою генериков и наследования? И радоваться, что это нормально? Или он будет называться go3 и порушит совместимость со старым кодом похлеще 3-го Питона?

Vudod ★★★★★ ()