工作上不安全

主要观点:

  • unsafe在 Rust 中引发了诸多困惑和意见,但其并未停用借用检查器,而是作为语言的超集,增加了一些可以绕过借用检查器的功能,如解引用原始指针、调用unsafe函数等。
  • Rust 中有不同类型的指针,包括共享引用、可变引用和原始指针,原始指针不受借用检查器的检查,解引用原始指针需要在unsafe块中进行。
  • 应避免直接使用unsafe代码,而是通过安全抽象来实现相同的功能,如 Bevy 引擎中的ThinArrayPtr,在使用unsafe代码时要遵循一些准则,如限制unsafe代码的范围、在 API 设计中使用unsafe关键字、对unsafe代码进行文档说明等。
  • unsafe代码时可以使用 Miri 进行检查,它可以检测一些未定义行为。
  • unsafe是一种安全特性,它允许开发者在一定范围内进行更底层的操作,但使用时要明确其潜在的问题,并将其影响限制在较小的范围内。

关键信息:

  • unsafe在 Rust 中的各种用法和限制,如不能停用借用检查器、可解引用原始指针等。
  • Bevy 引擎中安全抽象的示例,展示了如何在不直接使用unsafe的情况下实现高效的数据结构。
  • unsafe代码的编写准则和 Miri 的使用,以提高代码的安全性。
  • unsafe的误解以及其与 C/C++的区别,强调unsafe在 Rust 中的安全性。

重要细节:

  • 在 Rust 中,不同类型的指针及其特点,如共享引用和可变引用受借用检查器检查,原始指针不受检查。
  • unsafe函数和unsafe块的区别,前者突出代码可能导致未定义行为,后者表示已检查所有安全不变量。
  • Bevy 引擎中ThinArrayPtr的实现细节,包括使用NonNull<T>作为安全抽象以及在unsafe代码中进行的各种操作和检查。
  • Miri 在检查unsafe代码时的作用和输出示例,如检测 dangling 指针和其他未定义行为。
阅读 7
0 条评论