Rust 语言学习手册

免费学习 系统级编程 内存安全

Rust学习手册《Pin 与固定数据》:`Pin` 保证类型为 `!Unpin` 的数据不会被移动,常用于自引用结构或异步 I/O。 ```rust use std::pin::Pin; use std::marker::PhantomPinned; struct SelfR...

进阶主题

Pin 与固定数据

【详细说明 & 代码示例】
`Pin

` 保证类型为 `!Unpin` 的数据不会被移动,常用于自引用结构或异步 I/O。 ```rust use std::pin::Pin; use std::marker::PhantomPinned; struct SelfReferential { data: String, ptr: *const String, _pin: PhantomPinned, } impl SelfReferential { fn new(data: String) -> Pin { let mut s = Box::pin(Self { data, ptr: std::ptr::null(), _pin: PhantomPinned, }); unsafe { let mut_ref = Pin::as_mut(&mut s); Pin::get_unchecked_mut(mut_ref).ptr = &mut_ref.data; } s } } ``` **使用场景:** `Future` 在 `.await` 时要求固定在内存中,`pin-project` 等库简化操作。 **注意:** 大多数类型是 `Unpin`,无需关心 `Pin`。

学习提示:建议安装 Rust 工具链(rustup),使用 cargo 构建项目,并熟悉 rustc 编译器错误信息(Rust 的报错非常详细友好)。

全部章节目录(共 63 个知识点)

Rust 基础 (1个知识点)

所有权系统 (1个知识点)

借用与引用 (1个知识点)

生命周期 (1个知识点)

Cargo 与工具链 (2个知识点)

使用说明

  • • 本手册涵盖 Rust 从基础到并发、异步、Web 开发的完整知识体系
  • • 在搜索框输入关键词,快速定位相关知识点
  • • 点击条目标题进入详情页,查看详细说明与代码示例
  • • 页面按分类展示所有知识点,方便系统性学习
  • • 建议通过 Rust 官方文档(doc.rust-lang.org)加深理解