#yaml-parser #zero-copy #strict #subset #specification #input #minimalist

minimal-yaml

一个针对YAML规范严格子集的最简、零拷贝解析器

6个版本

0.1.5 2020年12月14日
0.1.4 2020年12月12日
0.1.2 2020年7月13日

1934解析器实现

每月下载量 31

MIT/Apache

52KB
1.5K SLoC

minimal-yaml

一个针对YAML规范严格子集的最简、零拷贝解析器。

动机

完整的YAML规范相当复杂,包括别名、锚点和类型推断等特性,这些特性解析和解析起来非同小可。对于某些用例,这些特性是多余的,并且相关的开销是不希望的。在它的最基本形式中,YAML(可以说是)归结为一种干净地表示序列和映射结构的简单方式。这个crate旨在支持这种简单用例。

使用

支持只包含序列和映射的YAML输入。不执行类型推断,所有字面值都被捕获为字符串切片。序列可以是流式样式

[such, as, this, sequence]

或块式样式

- laid
- out
- like
- this

同样,映射也可以是流式样式

{with : the, mapping : inline}

或块式样式

spread : across
multiple : lines

当然,序列和映射可以嵌套,任何有效的YAML元素都可以作为键或值,例如

[this, is] :
  -
    - totally
    - valid
  - input
  - {to : the parser}

根据crate的简约目标,公共API由一个主要结构和一个主要函数组成:枚举 enum Yaml<'a> 和函数 pub fn parse<'a>(input: &'a str) -> Result<Yaml<'a>>

性能

注意:以下是基于在单台机器上使用各种大小的输入进行的相当有限的基准测试

尽可能简化解析器的优点是,与现有的功能完备的解析器相比,minimal-yaml 表现更佳。与完全符合规范的解析器 yaml-rust 相比,minimal-yaml 的性能始终比其高 3-5 倍(即解析时间仅为 yaml-rust 的 1/3 到 1/5)。

许可证

许可协议为以下之一

由您选择。

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义的,任何有意提交以包含在作品中的贡献,将如上所述双重许可,无需任何附加条款或条件。

无运行时依赖