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

1.9 KiB
Raw Permalink Blame History

智能指针

Box — Rust 中的一种智能指针,作用就是为一个 把一个 属性 包装成一个具有move语义的属性 (被包装的这个)

  • Box 可以包装任何对象,并且被包装之后的的 引用是一个 具有 move语义的
  • Box 包装的引用 boxed如果原本引用 a 是 实现了Copy 的,则可以继续使用,如果没有实现 Copy 特征则不能再使用因为原始引用的所有权移到了boxed中
  • 在对Box解引用时过程和Box 创建过程相反,如果原始引用是一个没有实现 Copy 的,也需要注意引用的所有权转移

Box 包装之后的内容一定保存到堆上了 Box 实现了 Deref AsRef Drop所以boxed 可以访问T 想像 T 自己一样 Box 作为参数、Clone 特征、被引用都和一般的类型一样Clone需要考虑T 的Clone特征 Box Arc — Rust 中的一种智能指针Arc 是共享所有权模型的智能指针,也就是多个变量可以同时拥有一个资源的所有权 Arc 的 clone — 是基于引用计数的操作对被Arc 包装的引用的做引用计数所以Arc 的clone不用考虑原始类型 Arc 不支持解引用、不能修改内部引用的值


Rust 并发编程

  • 异步编程的开启方式async 声明一个异步的函数或作用域使用await来执行 async 函数
  • Rust 的异步运行时,
    • 运行时的作用:
      • 异步代码执行
      • 代码暂停
      • 状态的缓存
      • 外部事件的监听注册
      • 外部事件到来时,唤醒对应的任务,并恢复任务状态
      • 多个任务之间的调度
    • Rust 的异步运行时没有官方标准版tokio 的异步运行时基本是Rust的事实上的异步运行时库

Rust 中的异常

? 操作符;异常处理的一个 防御式编程 语法糖; 对 Result 的结果做解包如果Result的结果是Err 就直接return 一个错误