Go vs Rust

Feb. 25th, 2021 09:52 am
vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner

Периодически, когда заходит речь о новых языках программирования, у меня в комментариях возникают споры на тему того, что лучше Go или Rust.

Люди с математичеким образованием считают что Go крайне интересный язык, а Rust это так..

А мне, как практику Rust кажется намного симпатичнее. И не мне одному.

Вот ещё практики.

Похоже, что здесь ситуация примерно такая же как с C vs Pascal во времена нашей юности. Паскаль был симпатичнее, пока не надо писать и поддерживать сложные проекты. Вот похоже что с Go - то же самое. Правда Rust тоже наступает на те же грабли, обрастая своим cargo-культом. Но там это все же не так ярко выражено. И вообще zero runtime cost rules.

Date: 2021-02-25 07:21 am (UTC)
dzz: Dizzy の冬 (Default)
From: [personal profile] dzz
Честно говоря, у меня rust вызывает некое внутреннее неприятие на уровне синтаксиса. Похожая история была с Objective C и ruby, писать можно научиться, но радости от этого никакой.

Эксплуатационные характеристики rust-а при этом выше всяких похвал, но тот же ад со значениями, пропадающими из "использованных" переменных - просто жесть и издевательство :)

Date: 2021-02-25 04:30 pm (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Там логика другая. Не булева. Надо привыкнуть к этому. Терпение.

Date: 2021-02-25 11:34 pm (UTC)
dzz: Dizzy の冬 (Default)
From: [personal profile] dzz
Ещё меня чуточку смущает то, что "Hello, world" на rust-е занимает в после компиляции в 20 раз больше байт, чем на С :)

305 кб против 14 в ELF 64-bit после стрипа.
Edited Date: 2021-02-25 11:35 pm (UTC)

Date: 2021-03-01 09:43 pm (UTC)
allter: (Default)
From: [personal profile] allter
А на /bin/sh для линукс и того меньше - 19 байт:

echo "Hello, world"

И что с того? :)
Тут конечно, момент, что в Linux /bin/sh - интерпретатор по умолчанию...

Date: 2021-03-01 10:03 pm (UTC)
dzz: Dizzy の冬 (Default)
From: [personal profile] dzz
> И что с того? :)

Ну, хотя бы то, что rust позиционируется не как замена баша, а как конкурент C.

Date: 2021-03-01 10:27 pm (UTC)
allter: (Default)
From: [personal profile] allter
Вроде, все же замена не C, а C++.

Так-то и современные компиляторы C, и rust/C++ добавляют в бинарник инициализационную часть. Но они же не предназначены для того, что бы запускаться лишь для того, что бы вывести строчку. К слову, когда-то давно были бинарники со статическими переменными - таких сейчас практически невозможно создать - т.к. в век многопоточности это бессмысленно и опасно (даже C аллоцирует доп. память при старте).

Так что по месту, занимаемым бинарником на диске (и даже в памяти) не имеет смысла сравнивать...

Date: 2021-03-02 01:14 am (UTC)
dzz: Dizzy の冬 (Default)
From: [personal profile] dzz
Ну, нет. Я понимаю, что вы симпатизируете rust-у, но он по умолчанию тащит в бинарник ряд статических библиотек, которые можно было бы слинковать динамически. Это не "инициалиизационная часть" и уж тем более не некая "аллоцируемая память".

В 300k исполняемого кода можно упихать не только вывод одной строки, но и четверть bash-а или половину awk-а.

Так что сравнивать размер бинарников с C/C++ очень даже имеет смысл. Другое дело, что размер этого статического кода потом не особенно увеличивается по мере роста исходника, но сам подход немного удивляет.

> К слову, когда-то давно были бинарники со статическими переменными - таких сейчас практически невозможно создать

Это вы что-то фантастическое сейчас написали, не подумав :)


Edited Date: 2021-03-02 01:17 am (UTC)

Date: 2021-02-25 05:39 pm (UTC)
dargot: (Default)
From: [personal profile] dargot
Приветствую!

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

А вот Rust пробую понемногу и нравится все больше и больше, особенно после того, как я переключил в голове тумблер, чтобы воспринимать Rust не как C++ с одними классными штуками но без других классных штук, а как C с кучей классных штук.

С уважением, Dargot.

Date: 2021-02-25 07:30 am (UTC)
elglin: (Default)
From: [personal profile] elglin
Мне кажется, что у них совсем разная ниша.
Rust же позиционируется как "системный язык" - то есть прямая замена C и плюсам, но без их грехов.
Go - это язык для купи-продай вебсервисов. По сути, компилируемый питон или жабаскрипт с намного более низким порогом входа, чем плюсы, и, возможно, даже жаба.
Я от Go проходил только вводный курс, но то, что я там увидел - это корутины из коробки, темплейтинг из коробки, вебсервер из коробки и все такое. То есть это перемалыватель большого потока ввода-вывода поверх HTTP, причем либо REST-JSON, либо gRPC - то есть модные современные микросервисы и вот это все.
То есть переписать nginx или апач на Go - это туда-сюда, а вот, скажем, awk - нет. Rust же, наоборот, позиционируется как язык для переписывание не то, что awk, но даже ядра.

Date: 2021-02-25 09:14 am (UTC)
self_perfection_lj: (Default)
From: [personal profile] self_perfection_lj
И что характерно coreutils на расте таки переписывают - https://github.com/uutils/coreutils

Попытки переписать coreutils на Go находятся, но дохлые.

Date: 2021-02-25 09:20 am (UTC)
filin: (Default)
From: [personal profile] filin

И узких мест во всём остальном, ага. Так что те же nginx и апач я бы поначалу всё же на Rust переписывал, они рассчитаны на высокую нагрузку, причём мелкими порциями. Вот эти все тысячи запросов в секунду, и потребность отдавать файлы или данные от бэкэнда в драйвер сетёвки без промежуточного копирования в память. А вот всякие плагины, на которые нагрузка по тем или иным причинам невысока, можно и на чём-нибудь с GC.

Date: 2021-02-25 09:50 am (UTC)
elglin: (Default)
From: [personal profile] elglin
Sad Java noises.
Я скажу за веб-бэкенд разработку, потому что это мне известно не только в теории. Если мы не говорим про гуглояндексы и прочие дискорды, то пишем поначалу на жабаскрипте или питоне (или даже похапе). Скорость разработки едва ли не максимальная, производительность (sanic и aiohttp не вчера придумали), на самом деле приемлемая.
Лирическое отступление: говорим как-то за то, что у нас на работе отдельные коллеги считают высоконагруженным компонентом. Я спрашиваю: сколько rps? Мне отвечают - 30к. Ну думаю, да, вполне культурно, мы ж не гуглояндексы с их мега-rps-ами. А потом мне уточняют, что это не rps, а rph. То есть, эм, 8 rps. Занавес.
А дальше, скажем, мы снимаем 100 rps с ядра, и когда наша нагрузка начинает измеряться кило-rps-ами, то наш ценник на железо начинает лезть вверх, и мы начинаем думать. И переписываем hot path на Go. Работа со строками почти такая же удобная, экосистема уже почти такая же развесистая - а скорость разработки все еще приемлемая, потому что корутины, channels и GC из коробки. Дальше мы начинаем снимать сотни rps с ядра, если не тысячу, и успокаиваемся.
И только потом, как в дискорде, к нам приходят проблемы с 95-99% перцентилью из-за GC. И только вот если нам на это не возложить, мы уже переходим на плюсы, а теперь раст.

Штука в том, что подавляющее большинство сервисов не доходят даже до момента, когда пхп/питон/жабаскрипт начинают жать, а подавляющее большинство остальных удовлетворяются переписыванием даже не всего сервиса, а только hot path на Go.

... а серьезный бизнес как сидел на решетке и жабе, так и сидит.

Date: 2021-02-25 10:40 am (UTC)
filin: (Default)
From: [personal profile] filin

Ну, серьёзному бизнесу нужна заменяемость персонала. Желательно — дешёвого, в идеале ещё и на аутсорсе. На плюсы, хэш и жабу натаскивают в Индии. Это часть бизнеса гм, «владельцев языка». Плюс экосистема. Легко нанять программиста, легко найти компонент, который решает почти эту задачу. Нуивот.

Пока у серьёзного бизнеса серьёзные клиенты, но у сайта их сравнительно мало (покупателей у, допустим, самсунга много, но часто ли они ходят на его сайт? Вот rps и невелико) писать и правда можно на чём угодно. А если пишет индус, то и смысла писать на языке, удобном для выражения мыслей и страхующем от дурацких ошибок, никакого. Оный индус задачу-то даже не пытается понимать, куда там об архитектуре думать... Зато с моторикой у него хорошо, по кнопкам он стучит быстро. И их много.

А с действительно серьёзным клиентом всё равно общаются не через сайт. И там нужен не Rust, а English, на хорошем разговорном уровне.

Date: 2021-02-25 09:30 pm (UTC)
thedeemon: (Default)
From: [personal profile] thedeemon
Все так, да.

Date: 2021-02-25 04:09 pm (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Я не вижу, как можно сравнивать. Rust для ювелиров, чтоб делать что-то точное и работающее. Go для того, чтобы лепить поделки, POC-level. Язык для тупых.

Текст по линку блестящий. Спасибо.

Edited Date: 2021-02-25 04:13 pm (UTC)

Date: 2021-02-25 05:06 pm (UTC)
elglin: (Default)
From: [personal profile] elglin
Вот тут я решительно возражу. Нет языков для тупых. Можно сколько угодно поносить питон, го, да хоть бейсик и пренебрежительно называть "петухоном" или еще как-то, но это снобизм чистой воды.
Есть языки, на которых могут писать тупые, и языки, на которых тупые писать не могут - ко вторым относится, к примеру, Це, быстро и решительно отстреливающий тупому автору ногу. Но это не вина языка, а вина говнокодеров. К которым я нередко причисляю себя, особенно когда вижу, какую ересь писал год назад, и так каждый год.
Го офигенный язык для своего круга задач, и не его вина, что этот круг сейчас зело широк. Мне не нравятся отдельные идиосинкразии в его синтаксисе (У нас нет ООП, но есть функции, которые берут первым аргументом указатель на структуру... у нас не K&R C, на котором иначе никак, пошто на синтаксический сахар поскупились?), но очень нравятся каналы и горутины из коробки - это реально удобнее питоновского asyncio, не говоря про бустовый asio с его бесстековыми корутинами, которые одновременно пинцет быстрые и пинцет геморные в отладке и понимании кода.
Это не PoC-level. Это когда нужны тысячи rps с ядра, но еще не десятки тысяч (тут нужны плюсы или помянутый раст).

Date: 2021-02-25 04:19 pm (UTC)
metaclass: (Default)
From: [personal profile] metaclass
Rust лучше Go именно с математической точки зрения (аффинные/линейные типы?).
Но Go, несмотря на свою корявость, сильно удобнее - меньше плясок с несходящимимся закорючками, понятнее, итп.

Date: 2021-02-25 04:25 pm (UTC)
metaclass: (Default)
From: [personal profile] metaclass
В итоге, я уже несколько лет планирую сесть и переписать весь старый бекенд из смеси c#/дельфи/c/sql на раст, но пока получается только "переписать часть функций на Go, утащить к себе на сервер и продавать клиентам как SaaS", потому что на Go я могу это сделать за несколько дней в перерыве между "сдернули срочно решать какие-то тупые вопросы саппорта клиентов", а для Rust - нужно садиться, изучать, проектировать, писать долго и целенаправленно, а бизнесу это нахрен не надо.

Date: 2021-02-25 06:06 pm (UTC)
From: [identity profile] alexander-mikh.livejournal.com
Rust мне кажется как раз математически более правильным - особенно если заходил в какой нибудь Ocaml как чать карьеры.
Сейчас вот нат нем fft переписали и активно пилят ML - наример Rust BERT.
На днях нашел прекрасное: вот так (https://nickb.dev/blog/leveraging-rust-to-bundle-node-native-modules-and-wasm-into-an-isomorphic-npm-package) надо писать библиотеки для джаваскрипта

Date: 2021-02-25 07:20 pm (UTC)
From: [personal profile] caztd
Мне кажется все что упирается в garbage collection.
Оно можно быстро, очень быстро, но без него лучше.
Хотя если память не важна, а важны потоки,
то лучше Go чем Python.

Date: 2021-02-25 07:46 pm (UTC)
sab123: (Default)
From: [personal profile] sab123
Го - язык рожденный устаревшим. Если программы на Си++ получаются гораздо проще, понятнее, и компактнее, чем на Си, то на Го такого нет. Он очень похож в этом смысле на Си, и требует гораздо больше усилий, чем Си++.

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

Date: 2021-02-27 09:16 am (UTC)
dzz: Dizzy の冬 (Default)
From: [personal profile] dzz
> Го - язык рожденный устаревшим

Как писал ещё полвека назад профессор Дийкстра, "язык будущего для программистской техники прошлого" :)

Я не знаю, что подвигло Гугл создать собственный язык вместо того, чтобы вложиться в разработку качественного jit-компилятора для питона, с которого он на go и переполз в массе своей, но "что выросло, то выросло".
Edited Date: 2021-02-27 09:17 am (UTC)

Date: 2021-02-27 05:14 pm (UTC)
metaclass: (Default)
From: [personal profile] metaclass
Не, в голанге все таки статическая типизация и компилируемый он, так что везде, кроме ML и прочего матана, питон он уже обошел.

Date: 2021-03-01 10:08 pm (UTC)
dzz: Dizzy の冬 (Default)
From: [personal profile] dzz
Ну, нет, это очень сильное утверждение. В действительности, go мало где используется за пределами разработки веб-бэкэндов. Область, конечно, широкая, но не исчерпывающая.

Date: 2021-03-01 09:56 pm (UTC)
allter: (Default)
From: [personal profile] allter
Авторы же разъясняли - у них была задача создать язык для выпускников ВУЗов, что бы побыстрее, чем Питон, и что бы было всё нужное.

В принципе, они идеально справились - хороший язык появился, хотя лично мне не нравится своей "низкоуровневостью".

Date: 2021-02-26 07:40 am (UTC)
jno: (Default)
From: [personal profile] jno
Сделал тут на Go кастомный whois-сервер, ибо имевшийся питоновый вариант не пролез в цифры ТЗ - работает, 3К rps точно держит на не самой крутой ВМ против 300 rps у старого.

Печаль, конечно, что жлобы из гугля ограничили синтаксические радости только встроенными типами. Но горутины- ничего так, шустрые. И, с каналами, даже удобные. Готовых библиотек много и есть даже приличные - тот же постгрес задействовать удалось без особого геморроя. Мусорщик, конечно, доставляет отдельно - в бурстах может жрать бездну ресурсов. Но в целом - терпим. Ну и за микроаллокациями (читай - за Xprintf) следить надо. Хотя бы в main path.

Надо бы, конечно, и в Раст пристальнее глянуть... Хотя Це же есть...
Edited Date: 2021-02-26 07:46 am (UTC)

Profile

vitus_wagner: My photo 2005 (Default)
vitus_wagner

March 2026

S M T W T F S
1 2 34567
8 910 11121314
15161718192021
22232425262728
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 13th, 2026 10:26 am
Powered by Dreamwidth Studios