运行期保证

没有运行时未定义行为:

  • 数组访问是经过边界检查的。
  • 数字溢出是明确的。

要点:

  • 数字溢出通过一个编译期标识是可以明确的。可选项是要么 panic(一个可控的程序奔溃),要么是环绕。默认情况下,你会在 debug 模式(cargo build)获得 panic 并在 release 模式(cargo build --release)获得环绕。

  • 边界检查不能通过编译期标识取消。它也不能直接通过 unsafe 关键字取消。不过,unsafe 允许你调用如 slice::get_unchecked 这样的不做边界检查的函数。