В начале этого месяца случилась маленькая победа. Согласно последним результатам популярного бенчмарка, сравнивающего производительность языков программирования, Rust занимает второе место, разместившись между C и С++:

image

Для сравнения производительности используется геометрическое среднее времени выполнения 10 различных программ. Согласно последним результатам Rust превзошел С++ в 6 задачах из 10.

Под катом некоторое детали и мнение о дальнейших перспективах.

Как правильно интерпретировать результаты?


Benchmarks Game — популярный проект, в котором языки программирования сравниваются на основании измерений производительности написанных сообществом программ, решающих поставленные задачи. Как правило, для каждой задачи существует как минимум несколько хорошо оптимизированных реализаций на одном и том же языке. Для подведения общих итогов выбирается только одна реализация для каждого языка, показавшая наилучший результат.

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

Но ведь бенчмарки ничего не значат!


И да, и нет.

Конечно, разница в производительности различных реализаций для вашей конкретной задачи будет зависеть от множества факторов, и наверняка будет варьироваться значительно от задаче к задаче.

К примеру, Rust показывает худшие сравнительные результаты на тех задачах, решения которых требуют использования регулярных выражений. Из этих результат��в можно сделать вывод, что реализация регулярных выражений на Rust (крейт regex) работает медленнее чем PCRE2, при решении поставленных задач. С другой стороны, Rust заметно превосходит C++ для задач, требующих агрессивного применения SIMD операций.

Общий вывод, который следует сделать: при выборе между Rust и С++ производительность языков больше не может быть причиной отдать предпочтение С++. По крайней мере, без проведения дополнительных тестов.

Может ли текущая ситуация измениться?


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

Стоит ли ожидать дальнейшего улучшения производительности Rust?


Да. Компилятор Rust — относительно молодой проект, и значительное количество возможных оптимизаций еще просто не реализовано полноценным образом. Основной преградой является LLVM, который формально хоть и является универсальным транслятором, на практике хорошо оптимизирован для C/C++, и не очень хорошо справляется с байт-кодом (IR), полученным из других языков программирования.

Rust — более строгий язык программирования чем C и С++. Это означает, что для типичной программы Rust может дать гораздо больше гарантий транслятору (LLVM), который в свою очередь может их использовать для выполнения более агрессивных оптимизаций.

Таким образом, следует ожидать, что в ближайшие годы Rust сможет заметно улучшить свою производительность. В то же время, компиляторы C/C++ развиваются уже несколько десятилетий, и за это время достигли предела своих возможностей. Их дальнейшие оптимизации ограничены в основном особенностями языка, а не реализациями компиляторов.

Еще несколько лет назад мало кто мог представить, что возможно с высокой эффективностью писать код, превосходящий по производительности реализации на C/C++, используя при этом новый язык программирования и даже (прости господи) функциональный подход. Я думаю, что в ближайшее годы Rust докажет обратное своим примером, начав занимать уверенные первые места в различных тестах производительности. А вы?
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Сможет ли Rust в ближайшие несколько лет превзойти по производительности C?
52.85%Да315
47.15%Нет281
Проголосовали 596 пользователей. Воздержались 134 пользователя.