当前位置: 首页 > news >正文

【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()函数

修改前:

<
http://www.jsqmd.com/news/767618/

相关文章:

  • VR设备2025实测避坑指南,TOP4高性价比交互方案权威解析
  • 别光看命令表了!通过逻辑分析仪实测波形,带你真正看懂STM32F4与SD卡的SDIO通信协议
  • 解锁创意显示:利用快马ai辅助开发oled模块的智能动画与交互应用
  • 构建个人技能图谱:从知识管理到可执行技能库的实践指南
  • MCP协议实战:构建AI与本地Markdown文档的安全交互桥梁
  • 别再只盯着LSTM了!用PyTorch手把手实现GLU门控线性单元(附完整代码与避坑指南)
  • [后端作业W10] 参数验证
  • AppleAI项目解析:Swift与Core ML集成实践指南
  • 用HuggingFace的chinese-roberta-wwm-ext,10行代码搞定微博评论情感分类(附完整代码)
  • 保姆级教程:用Gazebo Garden新版为你的PX4无人机仿真‘升级’(Ubuntu 20.04环境)
  • 5.6笔记
  • 终极指南:如何用AXOrderBook构建A股高频交易订单簿系统
  • Docker Desktop已不适用于AI开发?(K3s+Podman+Ollama本地AI栈迁移实录,含性能压测对比数据)
  • AI上下文管理利器:Upstash Context7核心原理与工程实践
  • Supermodel MCP Server:为AI编程助手构建代码知识图谱,实现深度架构感知
  • Python装饰器进阶:用functools.wraps和inspect模块打造‘透明’的AOP工具
  • Cortex-R82内存系统与AMBA ACE-Lite事务机制解析
  • 用粤嵌GEC6818开发板复刻童年经典:从零实现一个带触摸屏的C语言五子棋(附完整源码)
  • 调试PID时别再瞎调参数了!手把手教你用VOFA+上位机可视化STM32电机响应曲线
  • Unity游戏配置管理新思路:用Luban插件实现Excel到游戏数据的无缝对接(含避坑指南)
  • Go语言高性能Web服务器Kraken:架构解析与工程实践
  • 免费在线PPT制作工具:如何在浏览器中创建专业演示文稿
  • 别只盯着GitHub!技术人“八小时之外”的自我修养:我们为什么需要莎士比亚和巴赫?
  • 基于事件驱动的消息镜像插件:解耦业务与通知的配置化实践
  • Code Agent源码深度解析:从架构设计到工程实践
  • 通过账单追溯功能分析月度大模型 API 开支的具体构成
  • 手把手教你用Verilog实现一个APB3 Slave模块(附完整代码与仿真)
  • R语言geodetector包实战:用栅格数据做地理探测器,从数据清洗到结果解读全流程避坑
  • 第二部分-Docker核心原理——06. Docker 架构深度解析
  • MCP工具链兼容性检查与安全防护:mcp-lint工具全解析