<The Rust Programming Language> 配套视频(第15章-第16章)

内容来自杨旭老师 Rust编程语言入门教程(Rust语言/Rust权威指南配套)【已完结】



第15章 智能指针

使用Box在堆上分配数据

使用Box在堆上存储数据

使用装箱定义递归类型

通过Deref trait将智能指针视作常规引用

使用解引用运算符跳转到指针指向的值

把Box当成引用来操作

定义我们自己的智能指针

通过实现Deref trait来将类型视作引用

函数和方法的隐式解引用转换

解引用转换与可变性

借助Drop trait在清理时运行代码

使用std::mem::drop提前丢弃值

基于引用计数的智能指针Rc

使用Rc共享数据

克隆Rc会增加引用计数

RefCell和内部可变性模式

使用RefCell在运行时检查借用规则

内部可变性:可变地借用一个不可变的值

将Rc和RefCell结合使用来实现一个拥有多重所有权的可变数据

循环引用会造成内存泄漏

创建循环引用

使用Weak代替Rc来避免循环引用


第16章 无畏并发

使用线程同时运行代码

使用spawn创建新线程

使用join句柄等待所有线程结束

在线程中使用move闭包

使用消息传递在线程间转移数据

通道和所有权转移

发送多个值并观察接收者的等待过程

通过克隆发送者创建多个生产者

共享状态的并发

互斥体一次只允许一个线程访问数据

RefCell/Rc和Mutex/Arc之间的相似性

使用Sync trait和Send trait对并发进行扩展

允许线程间转移所有权的Send trait

允许多线程同时访问的Sync trait

手动实现Send和Sync是不安全的



如果不用*y,而直接 assert_eq!(5, y)

你无法可变地借用一个不可变的值

只是将借用规则检查 延后到了 运行时阶段

test double: 测试替代。是个通用概念

但Rust std中没有这东西

将RefCell和Rc结合使用,是种常见做法

Rc允许多个所有者持有同一个数据,但只能提供对数据的不可变访问。

如果在Rc中存储RefCell,那么就可以定义出拥有多个所有则,且能够进行修改的值。

—分割线—

除了汇编语言之外,其他语言,包括C和C++,都有或大或小的运行时

新的线程,必须拥有通道发送端的所有权,才能往通道里发送消息

前面一个线程已经把所有权转移了。后面的线程拿不到了

只有实现了Send这个Trait,才能在线程间安全地传递