#string #zero-copy #split #line #shared #another #allocation

shared-string

在不进行额外分配的情况下分割字符串

8次发布

0.1.7 2021年5月7日
0.1.6 2021年2月10日
0.1.5 2020年12月3日

#317解析工具

Download history 12/week @ 2024-03-31 1/week @ 2024-04-07 1/week @ 2024-05-26 1/week @ 2024-06-02 109/week @ 2024-07-14

每月109次下载

MIT/Apache

27KB
575

具有共享所有权的 String

对于需要从字符串解析并分割成更小部分的类型很有帮助,例如 Url 或需要由父类型拥有的行的 Vec

注意

首先尝试存储引用,例如 &str,这更有效。

目前,如果您创建了一个 SharedString,则底层字节不能再被修改。

示例

use shared_string::SharedString;
// or SharedSyncString if `Sync` is required

struct Name {
    firstname: SharedString,
    middlename: SharedString,
    lastname: SharedString
    // to be faster than string
    // you should use at least 3 fields
}

impl Name {
    pub fn new(fullname: impl Into<SharedString>) -> Option<Self> {
        let mut split = fullname.into().split(b' ');
        Some(Self {
            firstname: split.next()?,
            middlename: split.next()?,
            lastname: split.next()?
        })
    }
}

let name = Name::new("Bartholomew Jojo Simpson").unwrap();
assert_eq!(name.firstname, "Bartholomew");
assert_eq!(name.middlename, "Jojo");
assert_eq!(name.lastname, "Simpson");

性能

SharedString可以通过如上例所示的场景提高性能超过30%。请参阅benches/*以获取基准测试。

无运行时依赖