6 个版本
0.2.0 | 2024 年 7 月 23 日 |
---|---|
0.1.4 | 2023 年 9 月 9 日 |
#391 in 文本处理
每月 134 次下载
17KB
259 行
strloin
strloin
提供字符串的写时复制 (cow) 切片。如果提供的范围形成单个连续区域,则返回字符串的借用切片。否则,返回每个范围的拥有拼接。
use strloin::Strloin;
let strloin = Strloin::new("hello world");
assert_eq!(strloin.from_ranges(&[0..5]), "hello"); // borrowed
assert_eq!(strloin.from_ranges(&[0..5, 5..11]), "hello world"); // borrowed
assert_eq!(strloin.from_ranges(&[0..5, 6..11]), "helloworld"); // owned
请注意,此 crate 旨在用于借用远比克隆更为常见的情况。如果克隆很常见,那么性能开销(更不用说认知开销)可能过于昂贵,您应考虑无条件克隆。您的体验可能会有所不同。但是,在一个实际的文本解析器中,85% 的 from_ranges
导致借用,从始终克隆切换到使用 strloin 条件性克隆产生了以下影响
Benchmark 1: always-clone
Time (mean ± σ): 1.259 s ± 0.089 s [User: 0.062 s, System: 0.063 s]
Range (min … max): 1.082 s … 1.367 s 10 runs
Benchmark 2: strloin-slices
Time (mean ± σ): 394.7 ms ± 40.0 ms [User: 49.5 ms, System: 50.7 ms]
Range (min … max): 310.7 ms … 452.0 ms 10 runs
Benchmark 3: strloin-ranges
Time (mean ± σ): 376.5 ms ± 36.1 ms [User: 45.5 ms, System: 56.5 ms]
Range (min … max): 324.7 ms … 441.2 ms 10 runs
Summary
'strloin-ranges' ran
1.05 ± 0.15 times faster than 'strloin-slices'
3.34 ± 0.40 times faster than 'always-clone'