3 个版本
0.0.2 | 2024年1月1日 |
---|---|
0.0.1 | 2024年1月1日 |
0.0.0 | 2023年12月30日 |
第 270 位于 内存管理
465KB
5K SLoC
vectorscan
A Rust 对 vectorscan C++ 正则表达式库的包装。
特性
vectorcan^vectorscan 库(最初为 hyperscan^hyperscan,来自英特尔)支持使用 PCRE 语法子集进行高性能模式匹配。它最初是为极低延迟的网络流量监控而编写的,因此它有一些可能不熟悉的接口特性。
- Vectorcan 回调 API:当 vectorscan 执行用户提供的 C ABI 方法调用时,将“返回”匹配给用户,因此与匹配引擎的重叠匹配和其他交互式反馈比同步方法调用更容易支持。
- 高度表达的模式集匹配:
expression::ExpressionSet
支持单个expression::Expression
实例可用的所有搜索和匹配操作。这是罕见的:大多数其他正则表达式引擎,例如,不支持找到匹配偏移量,而是仅支持集合中哪些表达式匹配。 - 可变状态和字符串搜索: Vectorscan 要求用户明确为每个搜索方法提供“刮擦”空间
state::Scratch
。此状态并不很大,但大多数其他正则表达式引擎试图提供一个没有任何可变状态的接口,即使它们在内部使用像懒惰 DFA 这样的结构。
功能标志
此库使用 spack-rs
通过 spack
配置 vectorscan 代码库的构建,以便它可以精确地指定它带来的本地依赖项。
"static"
(默认): 静态链接到 vectorscan。与"dynamic"
冲突。"dynamic"
: 动态链接到 vectorscan。与"static"
、"chimera"
和"alloc"
冲突。由于 spack 的缓存和 RPATH 重写,相同的动态库可以由此 crate 的每个依赖共享。"compiler"
(默认): 是否引入整个libhs
库,或者只引入libhs_runtime
,后者无法编译模式但可以反序列化它们。这显著减少了添加到二进制文件的代码大小。"chimera"
: 是否链接到 PCRE 并添加额外的 vectorscan 代码以提供与 chimera PCRE 兼容的搜索库。与"dynamic"
冲突,并且需要"compiler"
。
特性标志还用于在不使用时限制某些功能,以最小化外部依赖
"alloc"
: 使用crate::alloc
将挂钩到 vectorscan 的动态内存分配。由于修改进程全局钩子,需要"static"
。"stream"
(默认): 支持使用crate::stream
进行流解析。"vectored"
(默认): 支持使用Mode::VECTORED
进行向量模式解析。"catch-unwind"
(默认): 在匹配回调将未定义行为传播回 vectorscan 之前,捕获 Rust 的 panic。"async"
: 使用tokio
提供基于 vectorscan 的独特回调 API 的async
接口。"tokio-impls"
: 为tokio::io::AsyncWrite
实现了流解析器crate::stream::channel::AsyncStreamWriter
。
许可证
BSD-3-Clause,以匹配上游的vectorscan项目。
依赖关系
~5–16MB
~188K SLoC