7 个版本
0.0.8 | 2023年8月16日 |
---|---|
0.0.7 | 2023年8月14日 |
0.0.5 | 2022年11月1日 |
0.0.4 | 2022年10月26日 |
#1718 在 数据结构
在 char-list 中使用
30KB
570 行
front-vec
高效的 prependable Vec 和 String 类型。
公开了两种类型:FrontVec<T>
和 FrontString
。每种类型都实现了一个 push_front
方法,可以高效地将值 prepend 到数据结构的 front 部分。
这些类型实现了 Deref
,因此它们可以像切片/&str
一样使用。
不稳定警告
此 crate 使用以下不稳定特性,因此需要 nightly 编译器。
#![feature(ptr_internals, maybe_uninit_slice)]
unsafe
警告
这是一个“开发中”的 crate。我还没有确定所有使用 unsafe
的地方是否都有效。请暂时不要用于任何重要的事情。
潜在用例
高效的 Cons-列表
我的用例是比 cons-list 更高效地将数据打包到内存中,但具有相同的 API。
内存表示
my_front_vec =
[len: usize = 3]
[cap: usize = 8]
[buf: Unique<T> = *]
|
|
v
[?, ?, ?, ?, ?, x1, x2, x3]
此图显示了 FrontVec<T>
的内存表示,它与 Vec
的 vec![x1, x2, x3]
相对应。问号 (?
) 表示未初始化的数据。
缺点
这种表示(我相信)不允许使用 realloc
函数,该函数假设缓冲区前面的内存已初始化。因此,由于这个原因,Front{Vec,String}
的效率略低。
免责声明
这是我第一次编写 unsafe
代码,因此任何安全审计的贡献都肯定是受欢迎的!