Различает ли Rust конструкции, которые обменивают проверки во время компиляции на проверки во время выполнения? - PullRequest
4 голосов
/ 29 июня 2019

Есть несколько приемов, о которых я узнал, чтобы «обойти» ограничения Rust без использования unsafe.Например:

  • Option::unwrap
  • RefCell

Возможно, есть и другие, которые я забыл.

В случаяхкак это, ответственность за определенные аспекты правильности перекладывается с компилятора на программиста.Вещи, которые были бы ошибками компиляции, превращаются в панику, и программист, как ожидается, просто «знает, что их логика верна».

Паника лучше, чем повреждение памяти, но учитывая брендинг Rust как полностью безопасный язык,Я бы подумал, что эти «ловушки» будут формально идентифицированы каким-либо образом - в системе типов, документации или иным образом - для легкой идентификации.Программист должен знать, когда он использует ярлык и берет на себя дополнительную ответственность.

Существует ли такое различие?Даже просто явный список где-то в документации?Моя психическая модель неправильна, делая такую ​​вещь ненужной?

1 Ответ

6 голосов
/ 29 июня 2019

Нет, формальных различий нет.

Я полагаю, что вы спрашиваете, существует ли система эффектов . Хотя об этом говорили разработчики компиляторов некоторое время, нет единого мнения о том, будет ли это действительно полезным или вредным в долгосрочной перспективе.

"обойти" ограничения Руста

Эти "ничего не обходят". Сами методы обеспечивают соблюдение требований.

перешел от компилятора к программисту

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

с использованием unsafe

Небезопасный код действительно переносит ответственность на программиста. Однако затем этот программист создает безопасные абстракции, которые могут использовать другие программисты. В идеале они создают абстракции, используя инструменты, которые проверяются во время компиляции, помогая уменьшить ошибки времени выполнения.

Бренд Rust как полностью безопасный язык

ответственность за определенные аспекты правильности

Да, Rust намеревается быть безопасным для памяти языком , что не означает, что код, написанный на Rust, является правильным. Брендинг подчеркивает безопасность памяти; другие люди предполагают, что это означает, что такие вещи, как «не может разбиться», но мы не можем предотвратить все ошибочные интерпретации.

Смотри также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...