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 ()
Последнее исправление: sudopacman (всего исправлений: 3)

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

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

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

Есть мнение, что как только ты начнешь на нем писать не очень маленькие и не очень простые программки для дела, а не обучения, да еще и в команде, то твое отношение к Rust сменится на противоположное и максимально усилится.

Вполне возможно, трудно привыкнуть к некоторым вещам:

1. Деконструирующий let - это когда при объявление переменной и присвоение ей значения, она может разложить на части, например, кортеж:

let (x, y, z) = (1, 2, 3);
println!("x это {}", x);

2. if let, while let - это когда такой кусок кода:

loop {
    match option {
        Some(x) => println!("{}", x),
        _ => break,
    }
}

Можно сократить до такого:

while let Some(x) = option {
    println!("{}", x);
}

Но ни как к такому синтаксису не привыкну (=

3. Не совсем въехал во время жизни переменных и такая конструкция пока не совсем ясна зачем нужна!? Видимо компилятор сам следит за 'a и 'b и выдаёт еррор при drop'е оных, но пока не вкурил:

fn x_or_y<'a, 'b>(x: &'a str, y: &'b str) -> &'a str {

С остальным в целом встречался в той или иной степени, так что заходит пока норм...

AntonyRF ★★★★
()

правильной дорогой идут товарищи

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

C++ vs. D vs. Go

Без ASM и HTML в списке этот бенчмарк - бесполезен. Потому что, вдруг кто-то хочет выбрать, HTML ему использовать или ASM (что скрывать, у каждого порой такие вопросы возникают), а бенчмарк - неполный.

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

Не совсем въехал во время жизни переменных и такая конструкция пока не совсем ясна зачем нужна!?

Результат живёт столько же, сколько и x. Время жизни y отлично от x.

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

Сдается мне, это был сарказм.

anonymous
()
Ответ на: комментарий от intelfx
1. Стимул
2. РЕАКЦИЯ
3. ??????
4. PROFIT!

Молодец! Хороший фанбой!

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

Есть сервис gopkg.in для версионированного импорта с github

Фу бля. Лучше вообще без версионирования, чем через какой-то индусский домен. Впрочем, сервис полезный: если кто-то его присобачил к своей либе, знай: либа - говно, а авторы - идиоты. Лучший индикатор, пока ещё ни разу не подводил.

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

Ты не понимаешь. Это же теперь модно — всё делать через веб. Даже то, что можно через него не делать.

Пропустил бум .io, что ли?

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

Дык Go не защищает от data race в принципе. Или это о другом?

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

Функция rsvg_pixbuf_from_file_at_max_size, возвращающая указатель на GdkPixbuf * (что значит что она должна создать этот объект в куче), параметры - имя файла (с модификатором const, что значит что строку с именем файла можно будет спокойно реюзать дальше по коду), максимальная ширина и максимальная высота конечной картинки (типов gint, чтиобы можно было юзать на c89), указатель на указатель на ошибку - надо смотреть что за типа GError, скорее всего строка, значит вернется строка с ошибкой, выделенная где-то в недрах либо (скорее всего возьмется просто адрес из готового статичного массива).

Что вам не понятно было? Если вы ниосиливаете это окинуть взглядом и сразу сказать что функция делает какие параметры принимает, то вы - нуб и неосилятор.

PPP328 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.