Pin和PhantomData的理解
以下是对 Rust 中 Pin、Unpin 及 PhantomData 核心机制的完整技术解析,结合内存安全原理、异步编程实践及编译器行为,系统化梳理关键知识点: 一、Pin 的核心机制与内存固定原理 1.1 为什么需要内存固定? 自引用结构的危险性: 当结构体包含指向自身字段的指针(如 *const String),移动该结构体会导致指针指向旧地址,引发悬垂引用和未定义行为(UB)。 示例: ...
以下是对 Rust 中 Pin、Unpin 及 PhantomData 核心机制的完整技术解析,结合内存安全原理、异步编程实践及编译器行为,系统化梳理关键知识点: 一、Pin 的核心机制与内存固定原理 1.1 为什么需要内存固定? 自引用结构的危险性: 当结构体包含指向自身字段的指针(如 *const String),移动该结构体会导致指针指向旧地址,引发悬垂引用和未定义行为(UB)。 示例: ...
foreach需注意的细节 1 2 3 4 5 6 7 let arr = [1,2,3,4]; for i in arr { // ... } for i in &arr { // ... } 前者底层会调用into_iter(self) 会导致数组复制,可能产生意料之外的损耗 let 模式匹配获取值,解决 if let 会导致新增嵌套层的问题 1 2 3 4 5 6 7 8 let Data::Struct(s) = ast.data else{ panic!("MyDefault derive macro must use in struct"); }; let Some(s) = data else { panic!("not data"); } println!("{s}"); 断点调试时 LLDB和GDB看汇编源码 disassemble 命令 ...
Rustup 镜像, 修改配置 ~/.zshrc or ~/.bashrc,windows直接配置环境变量 1 2 export RUSTUP_DIST_SERVER="https://rsproxy.cn" export RUSTUP_UPDATE_ROOT="https://rsproxy.cn/rustup" 安装 1 2 curl --proto '=https' --tlsv1.2 -sSf https://rsproxy.cn/rustup-init.sh | sh # windows直接使用官网下载的rustup-init.exe即可 设置cargo.io镜像,修改配置 ~/.cargo/config.toml,已支持git协议和sparse协议,>=1.68 版本建议使用 sparse-index,速度更快。 sparse 1 2 3 4 5 6 7 8 9 10 [source.crates-io] replace-with = 'rsproxy-sparse' [source.rsproxy] registry = "https://rsproxy.cn/crates.io-index" [source.rsproxy-sparse] registry = "sparse+https://rsproxy.cn/index/" [registries.rsproxy] index = "https://rsproxy.cn/crates.io-index" [net] git-fetch-with-cli = true rsproxy 1 2 3 4 5 6 7 8 9 10 [source.crates-io] replace-with = 'rsproxy' [source.rsproxy] registry = "https://rsproxy.cn/crates.io-index" [source.rsproxy-sparse] registry = "sparse+https://rsproxy.cn/index/" [registries.rsproxy] index = "https://rsproxy.cn/crates.io-index" [net] git-fetch-with-cli = true
1. 离线安装 下载rust安装包: 链接 比如 x86_64-unknown-linux-gnu | x86_64-pc-windows-msvc 下载源码,https://static.rust-lang.org/dist/rustc-1.80.0-src.tar.xz , 中间的版本号根据下载的安装包改变 执行安装包(windows)或解压执行安装脚本 解压源码(应该是名为 rustc-x.x.x-src 的文件夹),将该文件夹更名为rust, 然后在rust安装目录的rustlib目录下新建src目录,再将刚更名的rust目录移入src目录下 windows:rust安装目录\lib\rustlib\ ...