5 个不稳定版本
0.3.2 | 2024年1月19日 |
---|---|
0.3.1 | 2024年1月18日 |
0.3.0 | 2024年1月15日 |
0.2.0 | 2024年1月15日 |
0.1.0 | 2024年1月13日 |
#422 在 嵌入式开发
39KB
724 行
nstr
无 std、无全局分配器的字符串
适用于没有全局分配器和标准库的系统的字符串库。也就是说,所有内容都是在栈上分配的。支持大多数 std::string::String
API。
说明 / 动机
此库的目标是提供一个类似于通过预导入包含在每个 Rust 程序中的 std::string::String
类型的类型。它还旨在提供一个类似 std::vec::Vec
风格的类型,但此功能支持度不高,因为有许多方法需要堆的存在。
此库旨在用于没有全局分配器和标准库的系统,或者针对此类系统的库。
如果你曾经使用过 C 或 C++,你会熟悉 char *
类型。此类型是一个指向以空字节(\0
)终止的字符序列的指针。
此库与此类似,因为它有一个固定的最大长度,程序员必须跟踪字符串的最大容量。虽然这可能感觉相似,但重要的是要注意,在底层,此库是不同的。 char *
可变性需要全局分配器,而此库不需要。
我们不必担心的是空字节,因为我们跟踪字符串的长度,这对于易于截断来说很方便。
由于此库必须以这种方式实现,因此无法保证任何函数都不会引发恐慌。如果你想要这样做,只需确保你跟踪字符串的容量,然后在调用任何可能使字符串超出其容量的方法(如 push
或 push_str
)之前在你的代码中放置保护措施。
请注意,此库不是完全替代 std::string::String
的完美选择,但在大多数情况下应该是足够的。它实现了大多数API,但有些事情在没有全局分配器的情况下无法实现,或者像 Drain
这样的迭代器不在 core
库中。
还值得注意的是,在某些地方,由于我们无法使用 std
库,函数签名在几个地方略有不同。
请注意,此库缺少 std
库具有的优化,并且不打算用于性能关键代码。
缺少的API
- 模式匹配(在std中不稳定)
- 原地扩展的能力(需要全局分配器)
支持的API
- 其余所有内容
ToString
特性(为实现了core::fmt::Display
的所有内容实现)