ax-linked-list-r4l
路径:
components/linked_list_r4l类型:库 crate 分层:组件层 / intrusive 链表基础件 版本:0.3.0文档依据:Cargo.toml、README.md、src/lib.rs、src/raw_list.rs、src/linked_list.rs、tests/cursor.rs
ax-linked-list-r4l 提供一套来自 Rust-for-Linux 思路的 intrusive 双向链表实现,重点能力是“任意节点 O(1) 删除”。它属于容器叶子基础件:不是调度器、不是任务队列框架,也不是通用对象生命周期系统。
架构设计
设计定位
普通 LinkedList 很难在持有节点句柄时做到 O(1) 任意删除,而内核调度队列、等待队列常常需要“节点自己带着链表指针”。ax-linked-list-r4l 就是为这种场景准备的:
- 节点把
Links<Self>内嵌到对象里。 - 链表只串接这些 links,不额外分配节点壳。
- 节点一旦在链上,就能在 O(1) 时间被删除。
在当前仓库里,axsched 的 FIFO 和 RR 调度器直接用它维护 ready queue,这正是 intrusive 链表最典型的用法。
1.2 模块分层
raw_list:底层 intrusive 链表,直接操作裸指针和Links<T>。linked_list:在RawList之上增加Box/Arc/&T等包装器语义。def_node!:帮助用户快速定义内嵌Links的节点类型。
1.3 核心对象
Links<T>:嵌入到元素内部,保存前驱/后继和inserted状态。GetLinks:告诉链表如何从元素上拿到对应的Links。RawList<G>:最底层的 intrusive 循环双向链表。Wrapper<T>:把Box<T>、Arc<T>、&T统一成可入链对象。List<G>:对外更友好的拥有型封装。