5个版本

0.1.5 2021年2月3日
0.1.4 2021年2月3日
0.0.4 2020年4月10日
0.0.3 2020年3月15日

#2041 in 数据结构

MIT 许可证

56KB
1.5K SLoC

dynamic_graph

此crate处于实验阶段,可能会发生重大变化。

理解这个库有两个关键概念。第一个概念称为锚点。没有依赖某种形式的垃圾收集,几乎不可能创建健壮的与图相关的软件。对于像Python或Java这样的具有巨大运行时环境的语言来说,这不是问题,因为它们控制所有的内存分配,并且可以在任何时候停止执行以执行垃圾收集和内存重定位。在Rust中实现这一点很困难,并且与语言基础设施的集成更困难。

解决方案的第一部分是将图视为另一种集合,就像LinkedList一样。然而,图操作需要能够在安全的方式(或根本不提供)下操纵引用,而LinkedList无法做到。解决方案的第二部分是一个类似于LockGuard的结构,允许用户查看和修改图的内容,添加新条目,但不能删除现有条目。这个结构是Anchor[Mut]。作为访问图数据的唯一点,Anchor允许在不使用内部可变性(interior mutability)的情况下修改图条目。如果需要,锚点的析构函数可以成为一个完美的确定性'安全点'来执行垃圾收集。没有像Boehm GC这样高度侵入性的运行时钩子意味着,使用这个crate和选择手动内存管理对于关键情况来说非常简单。类型级别的魔法提供了所有这些,而没有任何运行时成本!

要理解的概念是Cursor。这个对象可以被视为一个高级迭代器,可以移动到任意的图条目并修改节点数据,添加或删除边以及遍历相邻节点。

待办事项列表

  • 更智能的清理策略
  • 更多类型的节点
  • 更好的示例和文档
  • 用户定义的类型
  • 去除懒加载快捷方式

依赖关系

~27KB