< 返回版块

Yuan YQ 发表于 2026-04-09 09:22

surelock: 编译期检查的死锁防护库

Surelock 是 Rust 死锁防护库,代码能编译就不会死锁,全程无运行时错误、无 Result/Option 包装,安全且易用。

一句话总结

  • 死锁发生在四个 Coffman 条件同时满足时。

  • Surelock 通过两种互补机制解决循环等待问题。

  • 同级别锁以确定顺序原子获取(LockSet

  • 跨级别锁可增量获取,并在编译期强制加锁顺序(Level<N>

  • 公开 API 均为安全实现,unsafe 代码仅封装在底层原始互斥锁内部

  • 兼容 no_std,零运行时依赖。

代码仓库: https://codeberg.org/expede/surelock

echelon: ALQ 的 Rust 实现

echelon 是自适应阶梯队列(Adaptive Ladder Queue, ALQ)的 Rust 实现。ALQ 是一种均摊 $O(1)$ 复杂度的优先队列,专为重尾分布场景设计。根据作者对 Rust 生态的调研,这是该算法在 Rust 中的首个实现 😮

与标准库中的 BinaryHeap 相比,核心区别在于均摊时间复杂度:标准库实现的均摊复杂度为 $O(\log n)$,而在处理优先级倾斜的数据时(如帕累托分布、对数正态分布、重尾时间戳等),ALQ 算法可达到均摊 $O(1)$。

作者实现这个结构的主要原因,是正在开发一个离散事件仿真引擎,需要合适的数据结构来管理事件队列。由于找不到满足需求的现有库,便自行实现了它。

在作者的 Mac 设备上,无论队列大小如何,P50 延迟约为 41ns / 操作。而当队列元素数量 n=10⁵ 时,BinaryHeap 的 P50 延迟会翻倍至 83ns,这是 $O(\log n)$ 下沉操作深度增加导致的。均摊 $O(1)$ 的优势在单次操作层面表现得十分明显。

感兴趣的读者可以了解:该算法由 Tang、Goh 和 Thng 于 2005 年提出,它将条目分为三层结构:

  • 顶层(Top):无序暂存区
  • 阶梯层(Ladder):多梯级桶数组
  • 底层(Bottom):小型有序列表

其关键特性是:无论队列大小如何,梯级数量始终被限制在一个很小的常数范围内,这正是其实现均摊 $O(1)$ 的核心。

Github: https://github.com/grayfail/echelon

Danube v0.11.0:完整的安全层

Danube 是用 Rust 构建、自包含、轻量级的云原生消息平台。平台内置 Raft 共识算法用于元数据同步,基于 Tokio 与 openraft 开发。针对高可靠性主题,Danube 结合了本地预写日志(WAL)、持久化分段存储以及元数据驱动的恢复机制,在实现低延迟消息分发的同时,可兼容本地磁盘、共享文件系统与对象存储等多种存储方案。

此次 v0.11.0 版本主要是新增了一整套完整的安全层:

  • 身份认证:支持多种方式:JWT 承载令牌、API 密钥服务账号,以及用于 broker 节点间身份校验的 mTLS。JWT 验证结果会被缓存(通过 DashMap 设置 30 秒 TTL),避免在 send_message 这类高频路径上产生 HMAC 计算开销。
  • RBAC 权限控制:覆盖 5 类资源、9 种权限类型,并支持层级作用域解析(主题、命名空间、集群)。
  • 默认拒绝策略:若没有任何权限绑定授予访问权限,请求将直接被拒绝。
  • 安全管理:提供完整的 gRPC 服务与 danube-admin 安全命令行工具,用于管理角色、权限绑定,以及离线生成 JWT 令牌。
  • 动态令牌轮换:客户端通过 with_token_supplier() 闭包,实现运行时从 K8s 投射卷或密钥管理服务中自动刷新令牌。

Github: https://github.com/danube-messaging/danube

Chrome 147 采用 Rust 编写的 XML 解析器

Chrome 147 在无需 XSLT 处理的场景采用 Rust 语言编写的 XML 解析器来替代原有的 C 语言 libxml2 库,消除 XML 解析过程中的内存损坏漏洞,提升了安全性。Chrome 正在逐步弃用 XSLT。在此过渡期间,你已经可以在不依赖 XSLT 的场景中,使用安全的 Rust XML 解析功能。

原文:https://developer.chrome.com/release-notes/147

--

From 日报小组 Yuan YQ

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页