Share E-Book
Scan to open this page

Scan with your phone to open this page

Author: rust官方

Rating No ratings yet

本书将深入挖掘Rust非安全(unsafe)编程中的一些必要但是又可怕的细节。由于此类问题天然的恐怖,本书散发出的不可描述的恐惧之力,极可能将你的神经彻底撕成千万个绝望的碎片。 如果你学会了rust还是感觉处处受限,应该看这本书,如果一个算法因为所有权很难实现,你应该看它

AI Reading Assistant

Whole-book reading guide from stratified index samples; jump to passages in the text

Brief outline
【One-Line Pitch】 本书将深入挖掘Rust非安全(unsafe)编程中的一些必要但是又可怕的细节。由于此类问题天然的恐怖,本书散发出的不可描述的恐惧之力,极可能将你的神经彻底撕成千万个绝望的碎片。 如果你学会了rust还是感觉处处受限,应该看这本书,如… 【Book Arc】 - **Opening (~0%–12%)**: 如果你学会了rust还是感觉处处受限,应该看这本书,如果一个算法因为所有权很难实现,你应该看它 致谢 致谢 当前文档 《Rust死灵书 - Rust高级与非安全程序设计》 由 进击的皇虫 使用 书栈 (BookStack.CN) 进行构建,生成于 2019-06-07。; 本特征: 无论如何,安全Rust代码都不能导致未定义行为 可以看出,安全和非安全的Rust之间存在一种不对称的信任关系。安全Rust必须无条件信任非安全 Rust,假定所有与之打交道的非安全代码都是正确的。反过来,非安全Rust却要谨慎对待安全Rust的 代码。 - **Early (~12%–35%)**: 别名 首先,有几点重要声明: 以下的讨论将采用最广泛意义上的别名的定义。而Rust的定义可能会更加严格,需要考虑到可变 性和生命周期。; fn to_string(data: &u32) - String { 2. - **Middle (~35%–65%)**: 有力的工具以处理这一问题: mem::uninitialized 。这个函数假 装返回一个值,但其实它什么也没有做。我们用它来欺骗Rust我们已经初始化了一个变量了,从而可以 做一些很神奇的事情,比如有条件还有增量地初始化。; #![feature(ptr_internals, allocator_api)] 2. - **Late (~65%–88%)**: } 本文档使用 书栈(BookStack.CN) 构建 - 118 - IntoIter 15.; fn cap(&self) - usize { self.buf.cap } 10. - **Ending (~88%–100%)**: # let first drain.next().unwrap();; // 用回调函数接收的值更新RustObject的值: 11. 【Key Takeaways】 - **如果你学会了rust还是感觉处处受限** (Opening): 如果你学会了rust还是感觉处处受限,应该看这本书,如果一个算法因为所有权很难实现,你应该看它 致谢 致谢 当前文档 《Rust死灵书 - Rust高级与非安全程序设计》 由 进击的皇虫 使用 书栈 (BookStack.CN) 进行构建,生成于 2019-06-07。 - **本特征: 无论如何,安全Rust代码都不能导…** (Opening): 本特征: 无论如何,安全Rust代码都不能导致未定义行为 可以看出,安全和非安全的Rust之间存在一种不对称的信任关系。安全Rust必须无条件信任非安全 Rust,假定所有与之打交道的非安全代码都是正确的。反过来,非安全Rust却要谨慎对待安全Rust的 代码。 - **胖”指针,它包含 指针本身和一些额外的信息(…** (Opening): 胖”指针,它包含 指针本身和一些额外的信息(具体请往下看)。 - **别名 首先,有几点重要声明: 以下的讨论将采…** (Early): 别名 首先,有几点重要声明: 以下的讨论将采用最广泛意义上的别名的定义。而Rust的定义可能会更加严格,需要考虑到可变 性和生命周期。 - **fn to_string(data** (Early): fn to_string(data: &u32) - String { 2. - **对于 A 的变性。可如果 A 被用在了多个成员中** (Early): 对于 A 的变性。可如果 A 被用在了多个成员中: 如果所有用到A的成员都是协变的,那么Foo对于A就是协变的 如果所有用到A的成员都是逆变的,那么Foo对于A也是逆变的 其他的情况,Foo对于A是不变的 1. 【Reading Tips】 - Use Passage locations below to jump into the text and set reading anchors - If this is a brief outline, click Regenerate (top right) for a synthesized guide 【Coverage Limits】 Compressed outline without the model (~28 index chunks). Full structured guide needs AI available.
Page 9
本特征: 无论如何,安全Rust代码都不能导致未定义行为 可以看出,安全和非安全的Rust之间存在一种不对称的信任关系。安全Rust必须无条件信任非安全 Rust,假定所有与之打交道的非安全代码都是正确的。反过来,非安全Rust却要谨慎对待安全Rust的 代码。 举个例子,Rust有 PartialOrd 和 O...
View in text
Excerpt 2
n!("{}", as_str::<'d>(&'d x)); 16. } 17. } 18. } 完蛋了! 当然,这个函数的正确写法应该是这样的。 1. fn to_string(data: &u32) -> String { 2. format!("{}", data) 3. } 我们必须创建一个值然后连同它的...
View in text
Excerpt 3
} 9. } 这有一点难懂。为了避免两个 &mut 指向相同的值,我们通过裸指针显式创建了两个全新的slice。 不过迭代器产生可变引用的方法更加难懂。迭代器trait的定义如下: 1. trait Iterator { 2. typr Item; 3. 4. fn next(&mut self) -> Opti...
View in text
Excerpt 4
候在Vec里再备份一份,但这种方法的性能是不可忍受的。 实际上,我们希望Drain在销毁的时候能够修复Vec的后台存储。他要备份那些没有被移除的元素 (drain支持子范围),然后修改Vec的 len 。这种方法甚至还是unwinding安全的!完美! 看看下面这段代码 1. let mut vec = vec!...
View in text
Excerpt 5
硬件对千奇百怪混乱状 态的要求。而我们只希望能写一段程序做我们想让它做的事情,并且要做得快。是不是很不错? 编译器重排 编译器努力地通过各种复杂的变换,尽可能减少数据依赖和消除死代码。特别是,它可能会彻底改变事 件的顺序,或者干脆让某些事件永远不会发生!如果我们写了这样的代码 1. x = 1; 2. y = 3...
View in text
Excerpt 6
tr.as_ptr() } 8. 9. fn cap(&self) -> usize { self.buf.cap } 10. 11. pub fn new() -> Self { 12. Vec { buf: RawVec::new(), len: 0 } 13. } 14. 15. // push/pop/i...
View in text
Excerpt 7
# assert_eq!(9, *last); 342. # } 343. # 344. # pub fn test_drain() { 345. # let mut v = Vec::new(); 346. # for i in 0..10 { 347. # v.push(Box::new(i)) 348. #...
View in text
Excerpt 8
针是经常可能为 null 的。看起来似乎需 要用到 transmute 或者非安全代码来处理各种混乱的类型转换。但是,Rust其实提供了另外的方 法。 一些特殊情况中, enum 很适合做空指针优化,只要它包含两个变量,其中一个不包含数据,而另外 一个包含一个非空类型的成员。这样就不需要额外的空间做判断了:给那个...
View in text
Tags
AI categories
Rust
Publisher: rust官方
Publish Year: 2018
Language: English
Pages: 158
File Format: PDF
File Size: 1.8 MB
Text Preview (First 20 pages)
Registered users can read the full content for free

Register as a Gaohf Library member to read the complete e-book online for free and enjoy a better reading experience.

Generating text preview…