< 返回版块

Mike Tang 发表于 2026-02-08 09:58

rootcause 0.11.0 发布:重大改进,向 1.0 版本迈进

rootcause 是一个新的符合人体工程学的结构化错误报告库,旨在像 anyhow 一样易用(特别是 ? 操作符可以直接工作),同时提供更丰富的结构和内省功能。

主要更新内容

  • 生态系统集成改进:新增与 anyhow、eyre 和 error-stack 等库的互操作性功能,可以轻松转换错误类型

  • 简化的钩子系统:简化了用于自定义错误处理的钩子系统

  • 独立的回溯 crate:将回溯支持移至独立的 rootcause-backtrace crate

  • 异步可靠性提升:从 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 生态系统增长和供应链安全重要性提升,这种方案不再理想
    • 内部实现复杂,难以维护和扩展

已建立的更强基础

  1. Flags trait:用于反射定义的标志位和处理标志位值的实例
  2. 规范文档:完整定义了标志位类型的术语和行为

新方案:bitflags-derive

  • 创建了独立的 bitflags-derive 过程宏库
  • 提供标志位感知的派生宏(如 FlagsSerializeFlagsDeserialize
  • 关键优势:不需要 bitflags 直接依赖 serde 等外部库
  • 未来所有外部库集成都将在此库中实现
  • 计划添加更多功能:重命名标志位、自动生成值等

对现有 bitflags 的影响

  • 保持稳定:继续维护,不计划重大版本更新或破坏性变更
  • 兼容性考虑:保留对不想依赖过程宏的用户的支持

https://kodraus.github.io/rust/2026/02/06/bitflags-derive.html

--

From 日报小组 Mike

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页