- 博客(5)
- 收藏
- 关注
原创 Rust Waker 与唤醒机制:异步任务的 “唤醒桥梁” 与底层逻辑解析
Rust 的 Waker 封装在std::task::Waker中,它并非具体的实现,而是一套 “唤醒能力” 的抽象 Trait。其设计意图是 “解耦任务与事件源”—— 任务无需关心事件源的具体类型(如 I/O、定时器),只需提供 Waker 作为 “唤醒回调”;事件源无需关心任务的具体逻辑,只需在事件完成时调用 Waker 的唤醒方法。std::task::Waker的核心方法简化后如下(聚焦关键逻辑):// 内部封装:指向唤醒逻辑的Trait Object(轻量级间接层)
2025-10-30 23:55:50
667
原创 Rust Poll 机制与状态机转换:异步非阻塞的底层驱动逻辑与工程化实践
Rust 的 Poll 机制封装在std::task::Poll枚举中,它是异步任务与运行时之间的 “通信协议”—— 任务通过 Poll 的返回值告诉运行时 “当前是否就绪”,运行时则根据该结果决定是否继续调度该任务。为直观展示 Poll 机制与状态机的协同,我们将自定义一个 “异步延迟任务”(类似tokio::time::sleep),手动实现Future trait,定义状态机,并在 tokio 运行时中运行。该任务的核心逻辑是:“等待指定时间后,返回Poll::Ready(())”。
2025-10-30 23:48:41
637
原创 Serde 的零成本抽象设计:Rust 序列化生态的性能与抽象平衡艺术
Serde 的核心是两个 Trait:Serialize(序列化)与Deserialize(反序列化),// 关联类型:序列化器(如JsonSerializer、BincodeSerializer)where// 泛型约束:序列化器需实现Serializer Trait它们通过 “关联类型 + 泛型参数” 的设计,在提供统一接口的同时,确保静态派发与编译期优化。id: u64,
2025-10-30 23:43:11
805
原创 Rust 方法与关联函数:实例与类型的权责划分及工程化实践
要区分 Rust 中的方法与关联函数,核心判断标准是 “是否依赖实例状态” 与 “是否包含self参数”—— 方法必须通过实例调用且第一个参数为self(或其变体),关联函数通过类型调用且无self参数,二者在语法、语义、用途上有明确边界。维度方法(Method)关联函数(Associated Function)调用方式实例调用(instance.method())类型调用(Type::function())self 参数必须包含(self/&self/&mut self)无 self 参数。
2025-10-30 23:31:29
558
原创 Rust 表达式与语句的区别:从语法差异到工程化实践
是否有返回值。表达式是 “产生值的计算单元”,可参与赋值、作为函数参数或返回值;语句是 “执行动作的代码单元”,无返回值(或说返回 “空值”()),仅用于触发副作用(如变量声明、打印输出)。// 1. 变量声明语句:定义变量x,无返回值let x = 5;// 5是表达式(值为5),但let x = ...是声明语句,无返回值// 错误:无法将声明语句的“结果”赋值给其他变量(因为声明语句无值)// 编译错误:expected expression, found statement (`let`)
2025-10-30 23:22:30
996
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅