Pest Book 终章:实现 AWK 解析
这个项目是一个基于 pest
解析器的 Awk 克隆实现,旨在提供一个完整的项目示例,展示如何使用 pest
解析器来解析和执行 Awk 脚本。
项目支持正则表达式模式、字符串和数值变量、大多数 POSIX 操作符和一些内置函数,但不支持用户定义函数以简化变量作用域管理。
AWK 是一种模式扫描和数据提取语言,擅长处理结构化文本文件。我们的实施将支持:
模式-动作编程模型
正则表达式匹配
处理 field 和 record
内置变量和函数
算术运算和字符串运算
控制流结构
在本教程结束时,您将拥有一个功能齐全的 AWK 解释器,能够运行以下程序:
BEGIN { print "Processing employee data..." }
/Engineer/ { engineers++ }
$2 > 30 { print $1, "is over 30 years old" }
END { print "Found", engineers, "engineers" }
阅读:https://pest.rs/book/examples/awk.html
代码:https://github.com/pest-parser/book/tree/master/examples/awk
Rasterizeddb:在 115 毫秒内全表扫描 500 万行的高性能数据库
我用 Rust 从头开始编写的自定义数据库 Rasterized DB 能够在 115 毫秒内扫描 500 万行(全表扫描)。
它从无模式转变为有模式,兼容 PostgreSQL 方言,并计划引入多种高级特性。目前项目仍处于开发阶段,稳定性尚未成熟,建议谨慎使用。
Reddit | 仓库:https://github.com/milen-denev/rasterizeddb
XMLity:功能最完善的 XML 解析库
XMLity 是一个受 Serde 启发的 XML 序列化/反序列化库,专为复杂 XML 结构设计,采用试错法解析,功能强大但速度稍慢。
它解决了其他库(如 yaserde、quick-xml)在命名空间和复杂结构支持上的不足。
与其他工具对比:
**
serde-xml-rs
**:缺乏对命名空间和其他功能的完整支持。**
yaserde
**:缺乏对试错法反序列化的支持,无法完整覆盖 XML 模式。**
quick-xml
**:缺乏对命名空间的支持。
Reddit | 仓库:https://github.com/lukasfri/xmlity
--
From 日报小组 苦瓜小仔
社区学习交流平台订阅:
Rustcc论坛: 支持rss
微信公众号:Rust语言中文社区