文章《为 Rust 中的锁中毒辩护》
这篇文章深入论证了 Rust Mutex 中毒(Poisoning) 实际上是 栈展开(Stack Unwinding) 机制的必要补充,主要观点如下:
- Unwind 导致锁意外释放:Rust 的 panic 处理默认是 Stack Unwinding。当线程崩溃时,运行时会逐层清理栈帧并执行析构函数(Drop),这会导致
MutexGuard自动释放锁。这与直接终止进程(Abort)不同,它允许程序在局部错误后继续运行。 - 数据不变性的破坏:Panic 通常发生在临界区内。如果线程在修改数据中途崩溃并触发 unwind,数据往往处于只写了一半、破坏了**不变性(Invariants)**的“脏”状态。此时锁被自动释放,若无标记,其他线程将毫无防备地访问这些损坏的数据。
- 中毒是逻辑安全的防线:中毒机制的核心作用,是在 unwind 发生后标记该锁保护的数据“不可信”。它强迫后续获取锁的线程处理这个 Result,而不是默认让损坏的数据逻辑扩散到整个系统。
- 恢复能力的代价:作者强调,既然 Rust 允许通过
catch_unwind等方式从 panic 中恢复(例如 Web 服务器只挂掉单个请求线程),就必须负责防止损坏的共享状态污染健康的线程。只要 Rust 支持 unwind,中毒机制就是保证正确性的必要手段。
阅读:https://sunshowers.io/posts/on-poisoning/
讨论:https://www.reddit.com/r/rust/comments/1pck69k/in_defense_of_lock_poisoning_in_rust_by_sunshowers/
视频:我如何利用 Rust 打击人口贩卖
EuroRust 2025 演讲系列。
Trafficking Free Tomorrow 是一个非营利组织,致力于为执法部门提供数字取证工具,以打击人口贩卖。在演讲中,Brooke 将向我们展示如何利用 Rust 语言,让一个人发挥真正的影响力,帮助幸存者获得正义!🦀
观看:https://youtu.be/CbpXKqay_oY
Fresh:由 Rust 编写的全新终端文本编辑器

Fresh 是一款由 Rust 编写的全新终端文本编辑器,旨在结合终端的便携性与现代 GUI 编辑器的易用性。主要特点:
- 极致性能:专为处理超大文件优化,宣称能在 600ms 内打开 2GB 的日志文件并完成颜色渲染,且内存占用低于 40MB,在处理大文件效率上显著优于 VS Code 和 Neovim。
- 零门槛易用:摒弃了 Vim 的模态编辑,默认采用类似 VS Code 的现代操作逻辑。支持鼠标操作、标准通用快捷键以及命令面板(Ctrl+P),旨在提供“终端里的 GUI 体验”。
- 功能完备:内置原生 LSP 客户端(支持代码智能补全)、支持多光标编辑和语法高亮。
- 灵活扩展:采用 TypeScript 作为插件编写语言,方便开发者扩展功能。
处理 2GB 带 ANSI 颜色的日志文件速度比较(neovim / emacs / vscode):
仓库:https://github.com/sinelaw/fresh
derive_more 发布 v2.1.0
derive_more v2.1.0 版本带来了多项功能增强与修复,并将最低支持 Rust 版本(MSRV)提升至 1.81。主要更新如下:
- 新增 Derive 实现:
- 新增
PartialEq和Eq,相比标准库实现,能更智能地处理泛型约束。 - 新增对枚举(Enum)的
Deref和DerefMut支持。
- 新增
- 功能增强:
Display和FromStr现支持rename_all属性,可自动转换大小写(如snake_case)。FromStr和TryInto支持指定自定义错误类型。- 数学运算 derive(如
Add,Mul)现支持跳过特定字段,并改进了泛型约束推断逻辑。 Errorderive 的source()现支持Option类型字段。
- Bug 修复:
- 修复了在 stable 工具链下使用
Backtrace导致的编译错误。 - 解决了涉及关联类型时的 Trait 约束遗漏问题,以及生成代码中抑制弃用警告的逻辑。
- 修复了在 stable 工具链下使用
仓库:https://github.com/JelteF/derive_more
Yazi 更新:支持远程文件管理
Yazi(意为“鸭子”)是一款用 Rust 编写的终端文件管理器,基于非阻塞异步 I/O。它旨在提供高效、用户友好且可定制的文件管理体验。
虚拟文件系统基础架构现已搭建完成,这意味着未来除了 SFTP 之外,添加其他常用服务将非常容易。对于不太常用的服务,我们还可以将 rclone 等工具与 VFS 集成。
文档:https://yazi-rs.github.io/docs/next/configuration/vfs
仓库:https://github.com/sxyazi/yazi
rust-parser-fuzz:Rust 语法解析器的差异模糊测试工具
Rust 解析器差分模糊测试器(Differential Fuzzer),旨在通过对比不同解析器的行为来发现潜在 Bug。主要特点如下:
- 核心机制:采用差分测试(Differential Testing)策略,自动生成大量随机的 Rust 代码片段(通常是极端的边缘情况),同时输入给多个主流 Rust 解析器。
- 测试对象:主要针对 rustc(官方编译器)、syn(宏解析库)和 rust-analyzer(IDE 语言服务器)这三大核心解析器。
- 发现问题:通过比对解析结果是否一致(例如某段代码被一个解析器接受而被另一个拒绝,或生成的语法树结构不同),来定位解析逻辑的差异和错误。
- 成效显著:作者表示该工具在发现边缘情况(如怪异的元组语法
(..t))方面非常有效,甚至因为发现的差异过多,导致验证工具本身的正确性都变得具有挑战性。
仓库:https://github.com/Skepfyr/rust-parser-fuzz
分享:使用 Macroquad 进行两年全职游戏开发
一位开发者使用 Macroquad(Rust 2D 游戏框架)进行两年全职游戏开发的经验。主要内容如下:
-
背景与选择理由:
- 作者全职开发了一款网络多人游戏。
- 选择 Macroquad 的原因在于其简单性和非侵入性。相比之下,当时的 Bevy 引擎在 ECS 跨平台确定性(如系统执行顺序、查询迭代顺序)方面存在困难,不利于网络同步。
-
正面评价(The Good):
- 极佳的入门选择:对于中级 Rust 开发者或游戏开发新手来说,Macroquad 是一个非常务实的选择,能让人专注于“做游戏”而不是“写引擎”。
- 务实高效:作者坦言,如果当时选择了 Bevy、Fyrox 或从头自研引擎,项目绝不可能进展到今天的程度。
-
负面痛点(The Ugly):
- 缺乏生态标准支持:
- 无 Serde 支持:Macroquad 使用作者自研的
nanoserde,这意味着无法直接对Color等内置类型使用标准的serde序列化。由于 Rust 的孤儿规则(Orphan Rule),开发者很难自行扩展支持,导致与生态系统其他库的交互变得痛苦。 - 无
wasm-bindgen支持:框架采用了自研的 JavaScript 互操作方案,且无计划支持 Rust Web 开发事实标准的wasm-bindgen,限制了 Web 平台的灵活性。
- 无 Serde 支持:Macroquad 使用作者自研的
- 缺乏生态标准支持:
-
总结建议:
- 如果你是想用 Rust 做游戏,Macroquad 值得推荐;如果你是资深开发者且需要高度定制,可能不需要它。作者不后悔这个选择,但也反思了“用 Rust 做游戏”相比“直接做游戏”所带来的额外挑战。
--
From 日报小组 苦瓜小仔
社区学习交流平台订阅:
评论区
写评论还没有评论