3个版本
使用旧的Rust 2015
0.1.2 | 2018年4月14日 |
---|---|
0.1.1 | 2018年4月14日 |
0.1.0 | 2018年4月14日 |
#1791 in 数据结构
15KB
50 行
延迟数组
LazyArray
是一个包含固定数量元素的数组,这些元素通过从0到其大小之前的usize
索引。所有元素最初都是未定义的,这意味着尝试获取它们将返回None
。每个元素一次可以设置,一旦设置,就永远不会改变。
示例用例
当我解析一个包含记录序列的二元格式时,我有了这个库的想法,这些记录可以相互引用以形成一个无环图。问题是我无法事先知道加载对象的顺序,因为任何对象都可以引用它之前和之后的对象。有了LazyArray
,我可以在发现它们之间的依赖关系时延迟加载对象,并将它们存储起来,这样它们就只加载一次。
为什么我认为它是安全的
LazyArray
通过在UnsafeCell
内部存储一个Vec
来实现。我认为它有以下原因。
- 元素的数目在创建时分配一次,这意味着元素的存储永远不会移动。
- 如果元素未定义,则从外部引用
None
是不可能的。 - 如果元素已定义,则可能存在对它的引用,但它的值永远不会改变。
- 它不是
Sync
。