toml v0.9

主要内容总结:

  • toml v0.9 特性:近完全重写,性能大幅提升,支持no_std,还有其他改进。过去 3 个月专注于此实验,目标是提升 TOML 解析性能,如解决cargo publishCargo.toml解析开销大的问题,对比不同版本解析时间,新的toml v0.9性能显著提升。
  • 格式挑战:TOML 更面向人类,语法结构与 JSON 不同,如有序无关子表、特定表语法组合规则等,toml v0.9延续toml_edit的方法,提供逻辑DeTable进行解析。
  • Cargo 需求cargo曾用toml v0.5解析Cargo.tomlcargo add引入toml_edit后,需解决两个不同解析器的兼容性问题,确保性能不下降,toml_edit用于解析--config key=false表达式等,toml需保留特定特性以满足cargo需求。
  • 实现细节toml v0.5有易错令牌器,v0.6直接解析字节到Tablev0.9有无误令牌器,通过回调报告解析事件和错误,构建DeTable
  • 次要目标

    • 错误恢复:像rustc一样报告更多错误,通过&mut dyn ErrorSink参数,避免回溯,目前仅在toml中通过DeTable::parse_recoverable暴露。
    • 大整数支持:之前解析整数为i64,现在跟踪验证后的规范化字符串,用户可直接解析获取原始部分。
    • no_std 支持:设计toml_parser支持core,在资源受限系统中,可控制解析过程和标量值验证。
    • facetfacet-toml基于toml_edittoml更新为直接将serde转换为toml_writer,减少依赖。
    • 减少 TOML 解析器的扩散:有多种 TOML 解析器,转向toml基于toml_edit是正确的,可协作改进toml_parser底层。
  • 关于解析组合子:重写基于解析组合子的解析器为手写解析器后,认为默认选择应是解析组合子,但此次重写因满足用户需求是值得的,通常最重要的是能交付成果。
阅读 7
0 条评论