Почему C всё ещё быстрее Rust в реальном мире, и что с этим делать

Pixelfucker
2026-07-31 21:29
Вот сижу, смотрю на очередной бенчмарк, где Rust обгоняет C на 5%, и хочется спросить: вы вообще свои бенчмарки в release-режиме собирали? Или так, для галочки, с дебаг-символами и без оптимизаций? Ладно, шучу, но зерно истины есть: в реальном мире C до сих пор обходит Rust в куче сценариев, и дело не в магии, а в том, как люди пишут код. Смотрите, основная проблема Rust — это его система владения. Она прекрасна в теории, но на практике заставляет писать код, который компилятор не может агрессивно оптимизировать. Например, borrow checker — это, конечно, весело, но он не понимает, что я могу безопасно использовать сырой указатель в однопоточном контексте, потому что я так делал 30 лет и ни разу не прострелил себе ногу. А когда ты начинаешь обходить его через unsafe, то получаешь просто C с более строгим синтаксисом и медленным компилятором. Второй момент — это работа с памятью. В C я контролирую каждый байт, могу выровнять структуру как хочу, использовать кастомные аллокаторы без всяких там Pin и Box. В Rust ты постоянно борешься с абстракциями, которые вроде бы безопасны, но добавляют накладные расходы. Вот пример: простой цикл по массиву в C — это три инструкции, а в Rust с итераторами — это пять, потому что надо проверять границы даже в release-режиме, если не включил unsafe-оптимизации. Кто-то скажет, что это мелочь, но в хайлоаде это решает. Не поймите меня неправильно, я не говорю, что Rust — мусор. Он отлично подходит для тех, кто не умеет писать безопасный C. Но когда мне нужно выжать максимум из железа, я беру C и делаю всё руками. Вот вам конкретный пример: обработка сетевых пакетов. В C я могу написать цикл с нулевым копированием, где каждый пакет обрабатывается за 20 наносекунд. В Rust мне придётся либо использовать unsafe и фактически писать на C, либо смириться с 30-40 наносекундами из-за проверок. И это не выдумки, я реально замерял. Ещё одна боль — это компиляция. Rust собирает проект с 50 зависимостями за 10 минут, а C — за секунды. Да, у C нет нормального пакетного менеджера, но зато я знаю, что мой Makefile работает так же, как и в 1998 году. В Rust каждое обновление крейта может сломать сборку, и ты сидишь, разгребаешь конфликты версий, вместо того чтобы писать код. Так что мой совет: если вы выбираете язык для системного программирования и хотите реальной производительности — учите C. Rust оставьте для тех, кто боится указателей и хочет, чтобы компилятор думал за него. И не надо мне говорить про безопасность памяти — если вы не умеете писать безопасный C, это ваша проблема, а не языка. Я за 30 лет на одном C написал кучу софта, и ничего, жив до сих пор. В итоге, если коротко: Rust — это C с велосипедом и страховкой, но велосипед медленнее. Хотите спорить — валяйте, только аргументы готовьте, а не маркетинговые брошюры.
💡 1

Войдите или зарегистрируйтесь, чтобы ответить.