Rust是否正式区分将编译时检查与运行时检查交换的构造?

Rust是否正式区分将编译时检查与运行时检查交换的构造?,rust,Rust,我学到了很多技巧,可以在不使用safe的情况下“绕过”Rust的限制。例如: 选项::展开 RefCell 可能还有其他的我都忘了 在这种情况下,正确性的特定方面的责任从编译器转移到程序员身上。本来可能是编译错误的事情会变成恐慌,程序员只需要“知道他们的逻辑是正确的” 恐慌比内存损坏要好,但考虑到Rust作为一种完全安全的语言的品牌,我认为这些“陷阱门”会以某种方式被正式识别——在类型系统、文档或其他方面——以便于识别。程序员应该知道他们何时使用快捷方式并承担额外的责任 这种区别存在吗?甚至

我学到了很多技巧,可以在不使用
safe
的情况下“绕过”Rust的限制。例如:

  • 选项::展开
  • RefCell
可能还有其他的我都忘了

在这种情况下,正确性的特定方面的责任从编译器转移到程序员身上。本来可能是编译错误的事情会变成恐慌,程序员只需要“知道他们的逻辑是正确的”

恐慌比内存损坏要好,但考虑到Rust作为一种完全安全的语言的品牌,我认为这些“陷阱门”会以某种方式被正式识别——在类型系统、文档或其他方面——以便于识别。程序员应该知道他们何时使用快捷方式并承担额外的责任


这种区别存在吗?甚至只是文档中某个地方的一个明确列表?我的思维模式是不是错了,让这样的事情变得不必要了?

不,没有形式上的区别

我相信你是在问是否有一个。虽然编译器开发人员已经讨论了一段时间,但从长远来看,这到底是有益还是有害,还没有达成共识

“绕过”Rust的限制

这些“四处走动”什么都没有。这些方法本身可以确保满足要求

从编译器转移到程序员

我不同意这种评估。职责已从编译时间转移到运行时间,但编译器和库代码仍然确保维护安全

使用不安全的

不安全的代码确实将责任转移到了程序员身上。然而,那个程序员构建了其他程序员可以使用的安全抽象。理想情况下,它们使用编译时检查的工具构建抽象,有助于减少运行时错误

Rust的品牌作为一种完全安全的语言

对正确性的具体方面负责

是的,Rust打算成为一种内存安全的语言,这并不意味着用Rust编写的代码是正确的。品牌强调记忆安全;其他人认为这意味着“不能崩溃”,但我们无法阻止所有错误的解释

另见: