rootcause 0.11.0 发布:重大改进,向 1.0 版本迈进
rootcause 是一个新的符合人体工程学的结构化错误报告库,旨在像 anyhow 一样易用(特别是 ? 操作符可以直接工作),同时提供更丰富的结构和内省功能。
主要更新内容
-
生态系统集成改进:新增与 anyhow、eyre 和 error-stack 等库的互操作性功能,可以轻松转换错误类型
-
简化的钩子系统:简化了用于自定义错误处理的钩子系统
-
独立的回溯 crate:将回溯支持移至独立的
rootcause-backtracecrate -
异步可靠性提升:从
dyn Any切换到自定义 Dynamic 标记,规避了编译器在异步代码中与生命周期推断相关的特定 bug -
辅助功能改进:增加了各种人体工程学改进,包括用于频繁错误转换的辅助 trait
API 冻结计划
- 计划在 1.0 版本前冻结 API,现在是试用并提供反馈的理想时机
- 目标在 2026 年初发布 1.0 版本
- 这次更新是 1.0 前最后的重大破坏性更改之一
后续计划
- 在锁定 API 之前获得更多实际验证
- 构建更多生态系统集成(tracing 优先级较高)
- 开始遵循 MSRV 策略
- 1.0 后计划将支持窗口扩展到 12 个月
库 vs 应用使用场景
根据讨论,rootcause 不仅适用于应用程序,也适合在库中使用。将 thiserror 对象包装在 rootcause Report 中在很多情况下比单独使用 thiserror 更好,同时仍可访问内部的 thiserror 对象,并能轻松获取回溯和其他调试信息。
https://reddit.com/r/rust/comments/1pkuap7/rootcause_0110_big_improvements_and_one_step/
bitflags 的未来发展
作者作为 bitflags crate 的长期维护者,分享了该库的发展方向和新的解决方案。
2.0 版本遇到的问题
- 派生宏的行为问题:当使用
#[derive]时,生成的代码会将标志位类型视为普通整数,而非标志位集合 - 序列化问题:例如
MyFlags::A | MyFlags::B序列化后会得到3而不是"A | B" - 2.0 的解决方案局限性:
- 通过生成隐藏的内部类型来实现标志位感知
- 需要 bitflags 直接依赖所有想要派生的库
- 随着 Rust 生态系统增长和供应链安全重要性提升,这种方案不再理想
- 内部实现复杂,难以维护和扩展
已建立的更强基础
- Flags trait:用于反射定义的标志位和处理标志位值的实例
- 规范文档:完整定义了标志位类型的术语和行为
新方案:bitflags-derive
- 创建了独立的 bitflags-derive 过程宏库
- 提供标志位感知的派生宏(如
FlagsSerialize、FlagsDeserialize) - 关键优势:不需要 bitflags 直接依赖 serde 等外部库
- 未来所有外部库集成都将在此库中实现
- 计划添加更多功能:重命名标志位、自动生成值等
对现有 bitflags 的影响
- 保持稳定:继续维护,不计划重大版本更新或破坏性变更
- 兼容性考虑:保留对不想依赖过程宏的用户的支持
https://kodraus.github.io/rust/2026/02/06/bitflags-derive.html
--
From 日报小组 Mike
社区学习交流平台订阅:
评论区
写评论还没有评论