8 个版本

0.4.3 2024年6月29日
0.4.2 2024年1月30日
0.4.1 2022年4月27日
0.3.1 2021年5月18日
0.1.0 2020年7月22日

#121 in 文本处理

Download history 6077/week @ 2024-04-16 5785/week @ 2024-04-23 5243/week @ 2024-04-30 4020/week @ 2024-05-07 4566/week @ 2024-05-14 5124/week @ 2024-05-21 4970/week @ 2024-05-28 4181/week @ 2024-06-04 3985/week @ 2024-06-11 5722/week @ 2024-06-18 5386/week @ 2024-06-25 5323/week @ 2024-07-02 4744/week @ 2024-07-09 4565/week @ 2024-07-16 5483/week @ 2024-07-23 3686/week @ 2024-07-30

19,792 每月下载量

MIT 许可证

255KB
1.5K SLoC

切片切片

Actions Crate Docs License

基于 Wojciech Muła 展示的工作,使用 SIMD 加速的单模式子串搜索的快速实现。对于快速的多模式子串搜索算法,请参阅 aho-corasick

示例

use sliceslice::x86::DynamicAvx2Searcher;

fn main() {
    let searcher = unsafe { DynamicAvx2Searcher::new(b"ipsum".to_owned().into()) };

    assert!(unsafe {
        searcher.search_in(b"Lorem ipsum dolor sit amet, consectetur adipiscing elit")
    });

    assert!(!unsafe {
        searcher.search_in(b"foo bar baz qux quux quuz corge grault garply waldo fred")
    });
}

基准测试

我们在一个 i386 基准测试 上运行,该测试在一个 HP EliteDesk 800 G2 Tower PC 上,使用 Intel Core i7-6700 处理器 @ 3.40GHz16GB RAM512GB 硬盘空间,运行 Ubuntu 20.04.1 LTSgcc 9.3.0Rust 1.46.0

版本 功能 短搜索字符串 长搜索字符串
std 1.46.0 String::find [335.32 ms 335.56 ms 335.83 ms] [344.62 ms 345.01 ms 345.52 ms]
memmem 0.1.1 TwoWaySearcher::search_in [87.927 ms 88.029 ms 88.151 ms] [401.40 ms 401.59 ms 401.81 ms]
twoway 0.2.1 find_bytes [274.60 ms 274.82 ms 275.07 ms] [146.32 ms 146.44 ms 146.58 ms]
sse4-strstr¹ 0.0.0-9308a59 avx2_strstr_v2 [75.389 ms 75.515 ms 75.682 ms] [38.521 ms 38.579 ms 38.649 ms]
切片切片 0.2.0 DynamicAvx2Searcher::search_in [79.283 ms 79.416 ms 79.596 ms] [35.135 ms 35.181 ms 35.247 ms]

¹ sse4-strstr 不是内存安全的,因为它可以读取搜索字符串的末尾之外,请参阅 sliceslice 的文档,其中更详细地讨论了此问题。

Benchmarks results column chart

许可

在 MIT 许可证下发布。有关详细信息,请参阅 LICENSE 文件。

依赖项