Безопасен ли Rust?

Rust - это наша большая надежда на будущее. Даже если вы не используете его, вы наверняка слышали о нем и считаете, что это более безопасный язык, чем C или C++. Но так ли это на самом деле?

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

Это означает, что C - хороший язык, если вы хотите писать злой код, но и Rust тоже. В Rust вы можете обращаться к памяти по-своему, если просто добавите в блок кода ключевое слово unsafe. Однако если вы этого не сделаете, Rust попытается отследить использование вами памяти и не дать вам совершить ошибку. Наверное, можно сказать, что и C, и unsafe Rust небезопасны, но...

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

В недавнем сообщении в блоге Rust Foundation утверждается, что небезопасный код по-прежнему безопаснее кода на C:

  1. Небезопасный код должен быть изолирован в своих собственных блоках кода. Если что-то пойдет не так при использовании Unsafe Rust, будет ясно, какой код, скорее всего, вызвал проблему.
  2. Существует ограниченное количество способов использования unsafe, и весь безопасный код Rust продолжает выполнять свои обычные проверки безопасности даже внутри блока unsafe.
  3. Система типов Rust по-прежнему обеспечивает ограничения безопасности для безопасных типов Rust даже внутри небезопасного блока.

Чтобы выяснить, насколько распространен небезопасный код, Rust Foundation также исследовала 127 000 crates, то есть библиотек Rust, и обнаружила, что unsafe использовался примерно в 19 % из них, а 34 % делали вызов к crate, который использовал unsafe. Самым небезопасным криэйтом оказался криэйт Windows, которому явно приходилось обращаться к небезопасному Windows API.

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

Какие еще существуют ограничивающие факторы, из-за которых программисты вынуждены использовать unsafe? В опросе этот вопрос не рассматривается, а он очень важен. Мы склонны думать, что программисты используют unsafe, когда они ленивы и не могут потрудиться расширить безопасное управление памятью в своем коде. Либо это действительно неизбежная необходимость использовать внешний небезопасный код. Есть ли случаи, когда unsafe используется потому, что даже в идеальном мире нет альтернативы - как, например, при попытке построить список с двойными связями.

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

Безопасен ли Rust?
Понравилась новость? Тогда не забудь оставить свой комментарий.
А так же, добавь наш сайт в закладки (нажми Ctrl+D), не теряй нас.
30 мая 2024 г.
53
Теги: Rust

Комментарии

Оставить комментарий:
* отправляя форму, я даю согласие на обработку персональных данных

Читайте еще

Продолжаем добавлять языки программирования для Вас.
Впереди много интересного!

Только свежие новости программирования и технологий каждый день.

Свежие посты