Skip to content

Commit

Permalink
跟随上游 PR #447 更新
Browse files Browse the repository at this point in the history
  • Loading branch information
PureWhiteWu committed Apr 3, 2024
1 parent 13e9eed commit 47d22ad
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/intro.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
>
> 如果大家对于翻译有更好的建议或者想法,欢迎直接 PR~
>
> 目前翻译基于 commit:6bc2415218d4dd0cb01433d8320f5ccf79c343a1,基于时间:2024/1/4
> 目前翻译基于 commit:4993547527efa0bc81b0867247d20ff2b5636cfb,基于时间:2024/4/3
>
> Q:为什么不基于之前已有的中文版进行改进?
>
Expand Down
4 changes: 4 additions & 0 deletions src/what-unsafe-does.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@
- 如果 Slice 的长度不是有效的 usize(比如,从未初始化的内存中读取的 usize),那么 Slice 的元数据是无效的
- 一个由类型自定义的无效值,比如在标准库中的[`NonNull`]`NonZero*`(自定义无效值是一个不稳定的特性,但一些稳定的 libstd 类型,如`NonNull`使用了这个特性)。

如果你想要了解更多关于“未定义行为”的信息,可以参考 [Rust 参考手册](https://www.rustwiki.org.cn/zh-CN/reference/behavior-considered-undefined.html)

赋值、传递给一个函数/原始操作、从一个函数/原始操作返回的时候,都会“产生”一个值。

如果一个引用/指针是空的,或者它所指向的地址并非都是合法的地址(合法地址都应该是已分配内存的),那么它就是`悬垂`的。它所指向的范围是由指针值和被指向类型的大小决定的(使用`size_of_val`)。因此,如果指向的范围是空的,`悬垂```是一样的。要注意,切片和字符串指向它们的整个范围,所以它们元数据中的长度不能太大。内存分配的长度、切片和字符串的长度不能大于`isize::MAX`字节。如果因为某些原因,这太麻烦了,可以考虑使用原始指针。
Expand All @@ -47,6 +49,8 @@ Rust 在其他方面对其他可疑的操作是相当宽容的。Rust 认为以
- 中止程序
- 删除生产数据库

如果你想了解更多信息,可以参考 [Rust 参考手册](https://www.rustwiki.org.cn/zh-CN/reference/behavior-not-considered-unsafe.html)

然而任何真正可能做这种事情的程序都是*可能*不正确的,Rust 提供了很多工具来尽可能检查出这些问题,但要这些问题完全被预防是不现实的。

[pointer aliasing rules]: references.html
Expand Down

0 comments on commit 47d22ad

Please sign in to comment.