ray-note/语言/Rust/一些笔记.md

35 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

## 智能指针
> Box — Rust 中的一种智能指针,作用就是为一个 把一个 属性 包装成一个具有move语义的属性 (被包装的这个)
- Box 可以包装任何对象,并且被包装之后的的 引用是一个 具有 move语义的
- Box 包装的引用 boxed如果原本引用 a 是 实现了**Copy** 的,则可以继续使用,如果没有实现 Copy 特征则不能再使用因为原始引用的所有权移到了boxed中
- 在对Box解引用时过程和Box 创建过程相反,如果原始引用是一个没有实现 Copy 的,也需要注意引用的所有权转移
> Box 包装之后的内容一定保存到堆上了
> Box<T> 实现了 Deref AsRef Drop所以boxed 可以访问T 想像 T 自己一样
> Box 作为参数、Clone 特征、被引用都和一般的类型一样Clone需要考虑T 的Clone特征
> Box<Self>
> Arc — Rust 中的一种智能指针Arc 是共享所有权模型的智能指针,也就是多个变量可以同时拥有一个资源的所有权
> Arc 的 clone — 是基于引用计数的操作对被Arc 包装的引用的做引用计数所以Arc 的clone不用考虑原始类型
> Arc 不支持解引用、不能修改内部引用的值
---
## Rust 并发编程
- 异步编程的开启方式async 声明一个异步的函数或作用域使用await来执行 async 函数
- Rust 的异步运行时,
- 运行时的作用:
- 异步代码执行
- 代码暂停
- 状态的缓存
- 外部事件的监听注册
- 外部事件到来时,唤醒对应的任务,并恢复任务状态
- 多个任务之间的调度
- Rust 的异步运行时没有官方标准版tokio 的异步运行时基本是Rust的事实上的异步运行时库
---
## Rust 中的异常
`?` 操作符;异常处理的一个 防御式编程 语法糖; 对 Result 的结果做解包如果Result的结果是Err 就直接return 一个错误