Size: a a a

Rust — русскоговорящее сообщество

2021 June 19

goldstein опять in Rust — русскоговорящее сообщество
ripgrep быстрее grep не потому, что Rust быстрее C, а потому что многопоточный код с mmap'ами на C нормально написать настолько сложно, что до этого ни у кого не дошли руки
источник

goldstein опять in Rust — русскоговорящее сообщество
если ты сидишь и медитируешь над каждой строчкой по сто лет, то ты можешь написать на C такой же быстрый код, как на Rust
источник

goldstein опять in Rust — русскоговорящее сообщество
но код, который ты просто сел и написал, на Rust легко может оказаться быстрее, потому что Rust делает написание производительного кода проще
источник

C

Cooler3D in Rust — русскоговорящее сообщество
Спасибо за разъяснение. Следует ли из этого, что на любом компилируемом языке программирования, можно написать код близкий к скорости исполнения с таковым на Ассемблере?
источник

goldstein опять in Rust — русскоговорящее сообщество
на любом компилируемом языке без GC плюс-минус ещё какие-нибудь ограничения
источник

goldstein опять in Rust — русскоговорящее сообщество
C, C++, Zig, Rust, ZZ — можно получить примерно одинаковую скорость, и примерно максимальную
источник

goldstein опять in Rust — русскоговорящее сообщество
руками ассемблер писать это вообще обычно плохая идея, потому что ассемблер компиляторы давно пишут в среднем лучше, чем люди
источник

C

Cooler3D in Rust — русскоговорящее сообщество
Спасибо за уточнение!
источник

goldstein опять in Rust — русскоговорящее сообщество
надо также понимать, что «быстрее» зависит от задачи. чудовищно медленный сам по себе эрланг может быть «быстрее» в задаче, требующей массивной конкурентности, потому что он под это подстроен, а на другом языке для этого придётся писать ещё один эрланг.
источник

11

1 1 in Rust — русскоговорящее сообщество
множество людей, которые могут на ассемблере обогнать современный компилятор, практически не пересекается со множеством тех, кто об этом рассуждает.  чаще всего результатом прямого переписывания на асме бывает просадка в скорости раза в полтора-два.
источник

goldstein опять in Rust — русскоговорящее сообщество
SIMD до сих пор пишется без пяти минут на ассемблере
источник

goldstein опять in Rust — русскоговорящее сообщество
только что регистры сам не аллоцируешь
источник

11

1 1 in Rust — русскоговорящее сообщество
что всё-таки заметная часть геморроя
источник

goldstein опять in Rust — русскоговорящее сообщество
хотя во многих случаях «убедить компилятор засимдить код» может быть проще и эффективнее, чем вручную это сделать.
источник

goldstein опять in Rust — русскоговорящее сообщество
тут, опять же, плюс Rust — он довольно много знает про твой код, так что автовекторизацию делает охотно.
источник

C

Cooler3D in Rust — русскоговорящее сообщество
Я бы наверное и не задался таким вопросом, продолжая рукожопить на Python и JS (которые я начинал изучать методом тыка в готовые примеры), пока не столкнулся с чудовищно медленным Nfqueue
источник

goldstein опять in Rust — русскоговорящее сообщество
в C, например, нет деструкторов, поэтому стандартный паттерн работы с типами, которые нужно уничтожать специальным образом — сделать функцию, которая делает маллок + отдаёт PIMPL, и другую, которая выполняет кастомную логику уничтожения и делает free. Можно заметить, что это обязательно включает в себя аллокацию.
источник

goldstein опять in Rust — русскоговорящее сообщество
если ты не делаешь аллокацию на своей стороне, то её должен сделать клиент твоей библиотеки, а для этого он должен знать размер твоего типа. что обычно нежелательно, потому что на него кто-нибудь завяжется и ты не сможешь его поменять потом.
источник

goldstein опять in Rust — русскоговорящее сообщество
в Rust есть деструкторы, и ещё приватные поля, и ещё не принято работать с чужими структурами как с байтами — поэтому необходимости в этом паттерне нет и аллокаций становится меньше.
несмотря на то, что технически C может делать то же самое.
источник

C

Cooler3D in Rust — русскоговорящее сообщество
Спасибо🙏
источник