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
社区学习交流平台订阅:
评论区
写评论还没有评论