LINUX.ORG.RU

Go на Rust

Шило на мыло.

Deleted ()

А раст они тоже взяли версии, проверенной временем? И llvm 3.5 или 4.0?

As you might notice, there are latency and CPU spikes roughly every 2 minutes.

Но это же, сравнительно, целая вечность между этими двумя минутами.

After a bit of profiling and performance optimizations, we were able to beat Go on every single performance metric. Latency, CPU, and memory were all better in the Rust version.

Странно: если усреднить нагрузку на процессор, то, похоже, получится, что go-версия в среднем потребляет меньше ресурсов.

А где графики потребления оперативки?

gag ★★★★★ ()

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

О, ещё один вопрос, Раст давно не тыкал. А чтобы им пользоваться больше не нужно ставить nightly компилятор?

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

А раст они тоже взяли версии, проверенной временем?

Rust (nightly build) vs Go (1.9.x)

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

Потому что в rust «stable» не было фич асинхронности, а сторонние библиотеки их не устроили излишней вознёй с ними, насколько я понял из текста.

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

Это понятно. Но найтли в продакшене… так себе идея.

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

Странно: если усреднить нагрузку на процессор, то, похоже, получится, что go-версия в среднем потребляет меньше ресурсов.

Меня тоже позабавило их «had no latency spikes!» при средней большей нагрузке на процессор. Только что такое @mentions не понял.

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

Они не боятся применять новые перспективные технологии, их не беспокоят трудности и нестабильность «переднего края» разработки.

Ну заодно может помогут разработчикам rust отработать async.

В примечаниях пишут, что всё подряд на rust они переписывать не собираются.

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

Предлагаешь всё писать на Си?

Из комментариев:

Monir Zaman

Feb 5

May be you can just write it in C then?

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

Ещё интересно, как часто проводился семплинг нагрузки. График намекает, что недостаточно часто, так что, возможно, там пик по времени на самом деле короче.

gag ★★★★★ ()

проблема с GC в Go 3-x летней давности

На Hacker News пишут, что с момента обнаружения проблемы было 4 обновления Go. Видимо, эксперименты по переписыванию начались раньше, чем была выкачена новая версия с улучшенным временем отклика GC.

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

Меня тоже позабавило их «had no latency spikes!» при средней большей нагрузке на процессор. Только что такое @mentions не понял.

Ну версия кода на Rust видимо хуже оптимизирована, чем версия на Go.

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

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

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

Да, об этом они тоже пишут, что пока оптимизацией особо не занимались. Начали писать код, емнип, весной 2019.

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

Ну меньше чем за год получили реализацию не сильно хуже по CPU, но сильно лучшую по консистентной latency. Норм, чо.

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

Странно: если усреднить нагрузку на процессор, то, похоже, получится, что go-версия в среднем потребляет меньше ресурсов.

Так, вроде средняя выше у первой rust-версии, когда они увеличили кэш(что с го приводило к увеличению времени фризов), то, судя по графикам, нагрузка упала в 2 раза по сравнению с первой версией.

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

Но найтли в продакшене… так себе идея.

Любая версия она найтли. От не найтли отделяет только количество тестов проведённых. Так что если оттестируют, а они должны тестировать, то норм же.

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

если дискорд - это прод, то спуф у нас в целом датацентре живет и спит на мейнфрейме. не меньше!

der_looser ★★ ()

Чем бы хипсетры не тешились... Могли бы и на Жабе сваять свой бэкенд и не мучаться.

Valeg ★★★ ()

Discord переходит с Go на Rust

Правильный выбор!

th3m3 ★★★★★ ()

Проблема с GC есть во всех языках с GC. Чему тут удивляться?

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

Могли бы и на Жабе сваять свой бэкенд и

.. также страдать от фризов GC. Там где-то, то ли в статье, то ли в обсужденях на реддите, они писали, что кроме перехода Go -> Rust сделали переход от БД на жабе на БД на плюсах.

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

Ну заодно может помогут разработчикам rust отработать async.

При этом их основная аудитория геймеры очень критична к перебоям связи и всяким сюрпризам.

torvn77 ★★★★★ ()

Ну, а в языках без GC есть свои проблемы, например, фрагментация памяти. Как говорится: «палка о двух концах» или у «медали две стороны».

dave ★★★★★ ()

В моем понимании GC и HighLoad вообще слабо совместимы.

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

Остаётся только непонятным, почему перед переписыванием они не проверили на новых версиях Go? Если это обусловлено жаждой чего-то нового, то ладно.

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

Подколоть хотел? Как говорится: «блажен, кто верует»

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

Про Go не знаю, но в Java в разных аллокаторах точно есть, но при большой размерности задаче это ей не особо помогает...

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

Обалденный ЯП. Сегодня у нас так, завтра эдак. Новая версия вдруг стала быстрее, а более новая версия станет медленнее. Нафиг надо Сегодня одно, завтра другое.

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

В Java да, а вот про Go не уверен. Просто смущают высказывания вида «зачем думать о памяти, для этого есть GC», которые очень часто проскакивают. А то, что GC бывают сильно разные - люди забывают. GC в Go довольно примитивный и заточен под низкие задержки.

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

А чтобы им пользоваться больше не нужно ставить nightly компилятор?

Я думаю на данном этапе нет. Все важное в stable. Пару особенно упоротых веб-фреймворков вроде хотят nightly, но уже можно обойтись.

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

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

Мне кажется, что фризы GC - это само по себе неразрешимая задача, в принципе неразрешимая.

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

Только что такое @mentions не понял.

Когда ты в чатике пишешь @username, то username получает об этом уведомление

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

Вполне может быть на определенном коде. Если в Rust они дергали деаллокацию сильно много, а в Go просто оставляли мусор. Оплата потом - скачком в latency. Бесплатного сыра не бывает, они выбрали то что для них важно.

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

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

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

We tried upgrading a few times. 1.8, 1.9, and 1.10. None of it helped. We made this change in May 2019. Just getting around to the blog post now since we’ve been busy.

andalevor ()

TL;DR проблема с GC в Go 3-x летней давности

Через три года

TL;DR проблема с Unsafe в Rust 3-x летней давности

перешли на С + gcc + POSIX + SDL2

LINUX-ORG-RU ★★ ()
Ответ на: комментарий от LINUX-ORG-RU

Такое могло произойти разве что лет 20 назад. Сейчас максимум на C++ пишут. И то редко.

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

Так в любых языках.

Строки в C++11, например, это уже не те же строки, что в C++98.

grem ★★★★★ ()

а когда оно с электрона на го перешло?

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

Можно частично решить, останавливая каждый тред отдельно вместо всего мира сразу. Но так только Erlang делает.

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

позабавило их «had no latency spikes!» при средней большей нагрузке на процессор.

та самая сборка мусора?

Bad_ptr ★★★★ ()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)