Re[6]: Rust и экология
От: Artem Korneev США https://www.linkedin.com/in/artemkorneev/
Дата: 28.02.22 23:08
Оценка:
Здравствуйте, ononim, Вы писали:

O>Но имхо использование раста только ради того чтоб не использовать шаблоны С++


Ну не только ж ради этого. Я это привёл в пример как одну из причин, почему Rust на практике может оказаться чуть быстрее, чем С++. Хотя быстрее ли он на самом деле или нет, я не берусь судить. Для того чтобы это понять, тестировать нужно не на искусственных тестах, а на реальных программах. Т.е. нужно по сути написать одну и ту же программу на двух языках, используя одну и ту же внутреннюю архитектуру. И потом замерить производительность. И я очень сомневаюсь, что кто-то реально делал это на практике с программами сложнее, чем задачки на leetcode. А задачки на leetcode и прочие искусственные тесты, в свою очередь, дают лишь грубо приближённую оценку производительности на отдельных выдранных из общей картины примерах.

Ещё очков в производительности Rust'у может добавить отсутствие исключений в том виде, в котором они есть в C++. Там под капотом в Rust всё равно есть исключения, через них скорее всего и работает panic!(). Но в целом в Rust выбрасывать и ловить исключения не принято. Если там где и будет некое подобие try/catch, то скорее всего на границах потоков и на верхнем уровне всей программы. В плюсах, по-хорошему, тоже не принято злоупотреблять исключениями, а некоторые их и вообще исключают. Но в среднем по больнице их там всяко куда больше, чем в Rust.

А ещё экономия на явных и неявных runtime проверках. В Rust физически невозможно получить неинициализированный указатель, так что проверять на Null его не нужно. А в С++ частенько приходится, причём зачастую по нескольку раз для одного и того же указателя. Ну и ещё какие-то там приятные мелочи есть. В моих глазах Rust это вообще "правильно сделанный С++". Там убрали ООП в том виде, в каком он есть в плюсах, через наследование, но при этом переписали темплейты и макросы к более удобному виду. Убрали многие возможности выстрелить себе в ногу, намного более активно используются проверки на этапе компиляции, и при этом нет ни сборки мусора, ни виртуальных машин, ничего лишнего — на выходе мы получаем обычный бинарник, собранный тем же компилятором clang.

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

O>это сродни использовать это, ради того чтоб не стоять в очередях аэропортов


Не загрузилося.
С уважением, Artem Korneev.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.