#vec #string #push #cons #prepend

nightly front-vec

高效的 prependable Vec 和 String 类型

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 中使用

MIT 许可证

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> 的内存表示,它与 Vecvec![x1, x2, x3] 相对应。问号 (?) 表示未初始化的数据。

缺点

这种表示(我相信)不允许使用 realloc 函数,该函数假设缓冲区前面的内存已初始化。因此,由于这个原因,Front{Vec,String} 的效率略低。

免责声明

这是我第一次编写 unsafe 代码,因此任何安全审计的贡献都肯定是受欢迎的!

无运行时依赖