【Rust rand crate 版本升级指南(→ 0.10.1)】

📅 2026/7/3 3:40:28 👁️ 阅读次数 📝 编程学习
【Rust rand crate 版本升级指南(→ 0.10.1)】

本文档记录rand从旧版升级至0.10.1的完整过程,包括版本对比、API 变更详情、受影响文件及具体代码修改示例。


目录

  1. 升级概述
  2. 版本信息
  3. API 变更对照表
  4. 受影响的文件清单
  5. 代码修改详解
  6. 兼容性分析
  7. 升级步骤
  8. 验证方法

1. 升级概述

rand 0.10.1是一个破坏性变更(breaking changes)较大的版本,主要涉及:

  • thread_rng()函数被移除,替换为rand::rng()
  • Trait 和类型重命名RngCoreRng(原RngRngExt
  • 随机序列 trait 重构SliceRandom的读取方法移至IndexedRandom
  • 多个便捷方法重命名gen_rangerandom_rangegen_boolrandom_bool
  • choose_multiple弃用,推荐改用sample

本项目在以下 3 个文件中存在编译错误,已全部修复并验证通过。


2. 版本信息

配置项
rand版本0.10.1Cargo.toml第 32 行)
涉及的源文件encryption.rsnames.rsproject.rs
编译结果cargo check通过,零错误零警告

3. API 变更对照表

3.1 全局随机数生成器

旧 API新 API说明
rand::thread_rng()rand::rng()thread_rng已被移除

3.2 Trait 与类型命名

旧 API新 API说明
rand::RngCorerand::Rng底层随机数生成器 trait,提供fill_bytesnext_u32等方法
rand::Rngrand::RngExt用户友好随机数 trait,提供gen_rangegen_bool等便捷方法

3.3 RngExt 方法名称变更

旧方法新方法示例
rng.gen_range(0..n)rng.random_range(0..n)生成指定范围内的整数
rng.gen_bool(p)rng.random_bool(p)按概率生成布尔值

3.4 序列随机选择

旧 API新 API说明
rand::seq::SliceRandomrand::seq::IndexedRandom(用于读取方法)选择操作的 trait 变更
slice.choose(&mut rng)slice.choose(&mut rng)choose保留在SliceRandom
slice.choose_multiple(&mut rng, n)slice.sample(&mut rng, n)多选方法变更

4. 受影响的文件清单

文件路径变更类型变更数量
src-tauri/src/encryption.rs导入语句修改 + 函数调用修改3 处
src-tauri/src/names.rs导入语句修改 + 多处方法调用修改8 处
src-tauri/src/project.rs导入语句修改 + 方法调用修改3 处

5. 代码修改详解

5.1encryption.rs

变更 1:导入语句

修改前:

userand::{thread_rng,RngCore};

修改后:

userand::Rng;

说明:RngCore在新版本中已重命名为Rng,而thread_rng函数已被移除,不再需要导入。

变更 2:generate_salt()函数

修改前:

pubfngenerate_salt()->[u8;SALT_SIZE]{letmutsalt=[0u8;SALT_SIZE];thread_rng().fill_bytes(&mutsalt);salt}

修改后:

pubfngenerate_salt()->[u8;SALT_SIZE]{letmutsalt=[0u8;SALT_SIZE];rand::rng().fill_bytes(&mutsalt);salt}
变更 3:generate_nonce()函数

修改前:

<