Чем Rust быстрее C++?



Позвольте мне привести небольшую аналогию…

Лучшие теннисисты могут подавать мяч со скоростью более 130 миль в час (~210 км/ч), а рекордсмены подают мяч со скоростью около 260 км/ч.2026 Это поистине удивительные спортивные подвиги, и те же люди, которые выполняют первую подачу со скоростью 130 миль в час, выполняют вторую подачу со скоростью 100 миль в час (160 км/ч). Поскольку это элитные спортсмены в своем виде спорта, может создаться впечатление, что даже удар по мячу со скоростью 100 миль в час недосягаем для обычного человека. На самом деле, чтобы разогнаться до 100 миль в час, не требуется большого атлетизма. с современной технологией изготовления ракеток . Среднестатистические люди физически способны бить по мячу с такой силой. Для такой быстрой подачи требуется уверенность в своей способности удерживать мяч в пределах поля если вы нанесете такой сильный удар.

Если вы не уверены в этом, вы будете вынуждены сдерживать подачу, и поэтому ваша подача будет медленной. Если вы немного более опытны и последовательны и/или владеете такими техниками, как придание мячу большего топ-спина, вы, вероятно, сможете добиться того, чтобы больше подач приземлялось внутри бокса… и, таким образом, вы будете более ловкими. бесплатно чтобы ударить сильнее.

Именно в этом и заключается сравнение производительности Rust и C++.

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

Это означает, что производительность в Rust - это то, что происходит, потому что у вас есть эти гарантии, которые сделать разработчика более спокойным при изучении методов с более высокой производительностью . Вы все равно должны приложить усилия, чтобы сделать все быстро. Когда Mozilla говорит о том, насколько больше производительности они могли бы получить от движка рендеринга Servo’ по сравнению с любым другим браузером на планете, это не потому, что они’ делают что-то, что невозможно на C++ и возможно только в Rust… , это’ потому, что Rust делает это более быстро. надежно достижимо при меньших затратах явный усилия по программированию.

Приложить усилия для достижения того же вида параллелизма, безопасности памяти и так далее, которого они пытались достичь, не так-то просто, а браузеры - это не крошечные проекты. В таком большом проекте, как браузерный движок, независимо от квалификации разработчиков, они будут делать ошибки, разрушающие безопасность, то тут, то там. Если делать это на C++, то эти ошибки будут пойманы во время выполнения, и иногда они будут пойманы только в самых эзотерических случаях, что означает, что разработка будет включать в себя огромное количество времени на простое устранение ошибок. В Rust ошибки, разрушающие безопасность, отлавливаются во время компиляции. Очевидно, что вы’ не решите проблему с логика ошибки (что’ в любом случае невозможно), но эффективное устранение одного класса недостатков программного обеспечения является довольно значительным подспорьем.

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

Если вы сравните практически идентичные по принципу реализации C++ и Rust, есть шанс, что они будут довольно похожи по производительности. А в наивных или пробных реализациях C++ почти всегда быстрее. Тем не менее, C++ развивается по саморазрушительной спирали, просто бросая все больше кухонных раковин в стандарт, с чем у меня есть свои проблемы… , и, конечно, вероятно, появится набор новых идиом C++, которые обеспечат ему безопасность на уровне Rust, сохраняя при этом всю его производительность. Дело в том, что есть’ причина, по которой C++ по-прежнему используется во много раз чаще и будет использоваться и впредь—, поскольку существует огромное количество существующего кода на C++, который создавался десятилетиями. Это также означает, что существует огромное количество кода на C++, созданного до появления современных идиом, так что если вы можете достичь безопасности, это еще не значит, что вы достигнете ее. Поскольку нет реальной гарантии безопасности без большой работы, мы, разработчики, часто отказываемся от альтернатив в C++, которые могут привести к тому, что мы делаем много ненужного копирования, не используем параллелизм, больше полагаемся на оптимизацию компилятора и т.д. В интересах обеспечения стабильности нашего программного обеспечения.

Даже если отбросить это, это также означает, что существует огромное количество разработчиков, которые знакомы с C++ по сравнению с Rust, и это означает, что если вы действительно хотите приложить усилия, есть способы добиться такой производительности от C++, и есть люди, которые знают, как это сделать. В Rust этого нет’. но . Rust еще молод и не имеет такой же сильной стандартной библиотеки или набора привязок для общих случаев использования. Есть пакеты в crates и Github, созданные сообществом, но на самом деле их нет. де-факто стандарты для широкого спектра шаблонных функций. Хотя тот факт, что в Rust есть Cargo как сайт стандарт для упаковки и управления зависимостями - это то, что у него есть, чего, вероятно, никогда не будет у C++, и это поможет. Я думаю, что самый сильный рост в развитии Rust будет происходить за счет людей, которые познакомились с ним на ранних этапах своего карьерного роста, в отличие от старых луддитов вроде меня, выросших на IBM 360 и 6502, которым все еще трудно принять C++ lambdas за пределами его самых тривиальных применений.

106   0  
    Ничего не найдено.

Добавить ответ:
Отменить.