#vec #safe #array-vec #inline #overflow #enums

无 std tinyvec

tinyvec 提供 100% 安全的类似 vec 的数据结构

33 个版本 (14 个稳定)

1.8.0 2024 年 7 月 8 日
1.6.1 2024 年 6 月 25 日
1.6.0 2022 年 4 月 25 日
1.5.1 2021 年 11 月 9 日
0.3.3 2020 年 3 月 26 日

数据结构 中排名 14

Download history 1832421/week @ 2024-05-04 1899211/week @ 2024-05-11 1945854/week @ 2024-05-18 1823167/week @ 2024-05-25 1895802/week @ 2024-06-01 1864925/week @ 2024-06-08 1762187/week @ 2024-06-15 1956681/week @ 2024-06-22 1874113/week @ 2024-06-29 2238576/week @ 2024-07-06 2133384/week @ 2024-07-13 2207000/week @ 2024-07-20 2217458/week @ 2024-07-27 2337304/week @ 2024-08-03 2519206/week @ 2024-08-10 2046173/week @ 2024-08-17

每月下载量 9,479,940
30,463 仓库中(直接使用 138 个)

使用 Zlib OR Apache-2.0 OR MIT 协议

330KB
13K SLoC

License:Zlib Minimum Rust Version crates.io docs.rs

Unsafe-Zero-Percent

tinyvec

A 100% 安全的类似 vec 的类型库。不仅公共 API 边界安全,所有内部代码也是完全安全的:#![forbid(unsafe_code)]

提供以下类型:

  • ArrayVec 是一个基于数组的类似 vec 的数据结构。在溢出时引发恐慌。
  • SliceVec 类似,但使用 &mut [T] 作为数据支持。
  • TinyVec (alloc 功能) 是一个枚举,可以是 (ArrayVec)(Vec)。如果 TinyVecInline 并且数组会溢出,它将自动转换为 Heap 并继续执行。

为了达到这种 "100% 安全代码" 的状态,有一个妥协:vec 的元素类型必须实现 Default

有关更多 API 详细信息,请参阅 docs.rs 文档

tinyvec 的替代品?

也许你不想使用 tinyvec,这里有一些你可能想要使用的其他库!

  • arrayvec 是一个具有数组支持的库。
  • smallvec 是一个库,其数组支持的数据可以在溢出时移动到堆上。

主要区别在于这两个crate都使用了unsafe代码。这主要使它们能够摆脱Default限制,这是tinyvec施加的。通常,smallvecarrayveccrate是正确的,但偶尔会出现导致UB的错误。与tinyvec相比,任何未捕获的错误都不会导致UB,因为该crate从头到尾都是安全代码。如果您想要绝对避免UB的保证,请使用tinyvec

依赖项

~195KB