24个版本 (8个重大更改)
0.9.1 | 2024年4月3日 |
---|---|
0.9.0 | 2024年3月28日 |
0.8.7 | 2024年2月29日 |
0.8.4 | 2023年10月30日 |
0.1.2 | 2022年11月19日 |
#306 in 文本处理
每月40次下载
用于 rsonpath
740KB
15K SLoC
rsonpath-lib
– SIMD驱动的JSONPath库 🚀
用于rsonpath
的库,这是一个用于查询大规模流数据集的JSONPath引擎。
该库的主要目标是rsonpath
CLI工具。请注意,这个API在达到v1.0.0之前是不稳定的。这将会发生(我们有路线图),但我们的开发资源相当有限。欢迎并感谢贡献。
不安全
由于SIMD操作需要使用不安全的代码,该库使用不安全的代码,至少在portable-simd
稳定之前是这样。因此,编译后的库不可移植 - 如果你在支持AVX2的平台构建,然后在ARM平台上使用相同的编译代码,它将会崩溃。我们特别小心,不在任何其他地方使用不安全的代码 - 事实上,当没有默认的simd
功能编译时,该库使用#[forbid(unsafe_code)]
。
构建和测试
开发工作流程使用just
。使用包含的Justfile
。如果检测到环境中没有Cargo,它将自动使用rustup
工具为您安装Rust。
just build
just test
架构图
以下是模块交互和接口的简化概述,以及数据如何从用户输入(查询,文档)通过管道流向以生成结果。
可选功能
默认启用simd
功能,并建议使用项目的性能优势。
arbitrary
功能是可选的,并启用arbitrary
依赖项,该依赖项为查询结构体提供了Arbitrary
的实现。
依赖项
显示直接依赖项。
cargo tree --package rsonpath-lib --edges normal --depth 1
rsonpath-lib v0.9.1 (/home/mat/src/rsonpath/crates/rsonpath-lib)
├── arbitrary v1.3.2
├── cfg-if v1.0.0
├── log v0.4.21
├── memmap2 v0.9.4
├── nom v7.1.3
├── rsonpath-syntax v0.3.1 (/home/mat/src/rsonpath/crates/rsonpath-syntax)
├── smallvec v1.13.2
├── static_assertions v1.1.0
├── thiserror v1.0.58
└── vector-map v1.0.1
理由
cfg-if
- 用于支持SIMD和非SIMD版本。memchr
- 快速的SIMD化子字符串搜索,用于快速跳转到标签。memmap2
- 通过内存映射快速读取源文件,而不是缓冲区复制。nom
- 用于解析器实现。replace_with
- 在切换分类器时安全地处理内部分类器状态。smallvec
- 对于小型栈性能至关重要。static_assertions
- 通过在编译时验证一些常量假设提供额外的可靠性。thiserror
- 习惯性的Error
实现。vector_map
- 在查询编译器中使用,可显著提高性能。
依赖项
~2.8–4MB
~65K SLoC