людей, как заставить раст работать быстрее jav'ы, вчера сутки с коллегой проводили различные тесты(скорость работы циклов, работа с массивами, работа с хэшмэп и его сортированным вариантом) и в основном java была либо на уровне, либо ощутимо быстрее, судя по тому, что мы с коллегой только знакомимся с растом, вряд ли мы выжали из его всё, мне интересно ваше мнение, rust должен работать быстрее джавы? Может кто нибудь знает статью с грамотными сравнениями производительности (чтобы и с той и с той стороны был грамотный код для тестов) или другой ресурс? В общем как-то так.
rust должен работать быстрее джавы И по идее даже если вы забыли собрать с флагом --release
Есть случаи, когда Java может быть быстрее Rust из-за JIT и сборщика мусора, но вообще я бы ожидал, что в большинстве случаев код на Rust будет быстрее. Скорее всего, тут сказывается тот факт, что Java вы знаете куда лучше, чем Rust, а на Rust пишите не идиоматично
возможно стоит в сторону PGO покопать, хотя смотря что там за тесты были
В _среднем_ если _уметь писать_ на расте, то Раст будет быстрее джавы, при условии что на написание кода на Расте вы потратите больше времени, так как в связи с restrictive системой типов раста чтобы писать быстрый код необходимо проводить некоторые ухищрения по ублажению компилятора. То есть, простыми словами, писать быстрый код на расте сложнее чем на джаве, но при этом потолок скорости у раста скорее всего будет больше.
К слову, очень вероятно ещё то, что на ваших тестах просто не успевали включиться GC, и поэтому весь тот мусор который Rust должным образом убирал, в Java просто не успел собраться.
mem::forget ftw!
Опять софт для ракет?
ну не обязательно не так радикально - для короткоживущих cli утилит тоже в тему может быть
Для короткоживущих можно и нормально память чистить, хз
ось пускай почистит 🥱
вчера была похожая проблема, у знакомого есть утилита для обработки текстовых данных, так вот, он на го из тамошнего массива грузил данные в мапу(чтобы удалить дубли), я решил так же сделать и у себя - как итог у меня со всеми примочками lto = "fat" codegen-units = 1 а так же mimalloc(который, к слову, очень неплохо бустит), получилось на 26% медленнее. Так и не придумал как ускорить но с другой стороны и потребление ram уменьшилось на 25%
У стандартной хешмапы алгоритм хеширования заточен на защиту от DOS, а не на скорость
понял куда копать, спасибо)
ух, получилось ускорить аж на 50% используя fxhash, большое спасибо
50% в сравнении с го или старым растом?
старым растом
18% с го, очень неплохо я считаю. И это с тем же потреблением рам(то есть на 25% меньше)
Без конкретных сравнений смысла нет
потому что обычно оказывается что сравнивается непонятно что непонятно с чем: вот https://www.reddit.com/r/rust/comments/r75wm6/why_is_stdsyncmutex_6070x_time_slower_than_cs/ или https://www.reddit.com/r/rust/comments/r75wm6/why_is_stdsyncmutex_6070x_time_slower_than_cs/
Я правильно понимаю, что вы сравниваете некую non-std имплементацию мапа в расте с вообще неизвестной имплементацией мапа в го и на основании этого делаете вывод что раст быстрее?)
нет, я сравниваю растовскую хешмапу с гошной мапой (там вообще нет как таковых сетов)
Как бы нестдшные мапы, как правило, в расте не используют
да ну)))))))))))))0
Сильное заявление
я не так понял, сравниваю мапу, с более легкими вариантами хешей(которые, не secure)
Ну пример приведите
а именно rustc-hash::FxHashSet
Да это неважно Я пролистал тред, @zamazan4ik уже все сказал
вот последний оратор и привел
Обсуждают сегодня