#global-allocator #string #no-alloc #stack-allocated #no-std

无 std nstr

一个无 std、无分配、适用于嵌入式设备的字符串库

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嵌入式开发

MIT 许可证

39KB
724

nstr

无 std、无全局分配器的字符串

适用于没有全局分配器和标准库的系统的字符串库。也就是说,所有内容都是在栈上分配的。支持大多数 std::string::String API。

说明 / 动机

此库的目标是提供一个类似于通过预导入包含在每个 Rust 程序中的 std::string::String 类型的类型。它还旨在提供一个类似 std::vec::Vec 风格的类型,但此功能支持度不高,因为有许多方法需要堆的存在。

此库旨在用于没有全局分配器和标准库的系统,或者针对此类系统的库。

如果你曾经使用过 C 或 C++,你会熟悉 char * 类型。此类型是一个指向以空字节(\0)终止的字符序列的指针。

此库与此类似,因为它有一个固定的最大长度,程序员必须跟踪字符串的最大容量。虽然这可能感觉相似,但重要的是要注意,在底层,此库是不同的。 char * 可变性需要全局分配器,而此库不需要。

我们不必担心的是空字节,因为我们跟踪字符串的长度,这对于易于截断来说很方便。

由于此库必须以这种方式实现,因此无法保证任何函数都不会引发恐慌。如果你想要这样做,只需确保你跟踪字符串的容量,然后在调用任何可能使字符串超出其容量的方法(如 pushpush_str)之前在你的代码中放置保护措施。

请注意,此库不是完全替代 std::string::String 的完美选择,但在大多数情况下应该是足够的。它实现了大多数API,但有些事情在没有全局分配器的情况下无法实现,或者像 Drain 这样的迭代器不在 core 库中。

还值得注意的是,在某些地方,由于我们无法使用 std 库,函数签名在几个地方略有不同。

请注意,此库缺少 std 库具有的优化,并且不打算用于性能关键代码。

缺少的API

  • 模式匹配(在std中不稳定)
  • 原地扩展的能力(需要全局分配器)

支持的API

  • 其余所有内容
  • ToString 特性(为实现了 core::fmt::Display 的所有内容实现)

无运行时依赖