问:用Reason Native/OCaml编写的JQ重新实现速度更快

2020-09-14 20:31:17

多亏了OCaml,query-json(Q)是JQ语言在Reason Native中更快、更简单的重新实现,并编译成二进制。Q,允许您以可爱的语法编写在json文件之上操作的小程序:

这将访问stores.json中的";store";字段,访问";book&34;字段(因为它是一个数组),它将对每个项目运行筛选器,如果";价格&34;字段大于10,则将该项目保留在列表中,最后打印结果列表。

[{";Title";:";战争与和平";,";Author";:";Leo Tolstoy";,";Price";:12.0},{";Title";:";Lolita&34;,";Author";:";Vladimir Nabokov";,";价格";:13.0}]。

出色的性能:速度快、占用空间小、运行时间最短。有关更详细的说明,请查看性能部分。

令人愉快的错误:当json类型和操作类型不匹配时更好的错误:$esy q--';.esy.release ase.wat';esy.jsonError:正在尝试在`{";bin";:[";q";]}`上尝试.wat并且它不存在。

详细标志,打印每个状态下的每个操作及其中间状态。(正在进行的工作...)。

小:词法分析器、解析器和编译器只有300LOC,而我日常使用的大多数命令都只有140LOC实现。

在本地运行任何内容之前,请检查script/install.sh的内容。朋友不会让朋友卷曲|狂欢。

这份报告并不是这两种工具的令人兴奋的性能报告,而是对用户相关性能的概述。在这里,我不分析每个工具并尝试查看引导漏洞是什么,因为我认为这两个工具都有解析JSON文件的缺点。只需运行bash脚本并分析结果。

除此之外,Q不具备与JQ相同的功能,这在这一点上是可以接受的,但是JQ包含大量Q遗漏的功能,并且一些JQ操作不是本机的,它们是运行时内置的。为了进行适当的比较,上述所有因素都需要加以考虑。

报告显示,在所有测试的操作中,Q比JQ快2到5倍,对于大文件(>;100M),Q的速度相同(~1.1倍)。

了解如何使用menhir和sedlex使用OCaml堆栈编写词法分析器/解析器/编译器,同时尝试创建具有大量错误消息和可能的可恢复性(当前正在进行中)的编译器。

在Reason Native中创建一个CLI工具,并能够将其作为二进制文件分发,享受它的性能,并进一步尝试交叉编译。

选择它,将其重命名为筛选器,并以不同的方式操作。过滤器是要映射的别名(select())。✅。

贡献使开放源码社区成为一个令人惊叹的学习、激励和创造的地方。我们非常感谢您所做的任何贡献。如果您有任何问题,请联系我@Twitter或电子邮件([email protected])。

我通常在discord.gg/rational ml或rational ml.chat上闲逛,所以请随意在那里问任何问题。

Git克隆测试cd查询-jsonesy#安装所有内容esy https://github.com/davesnx/query-json#使用[https://reason-native.com/docs/rely),](TEST/.esy q#运行二进制文件下定义的测试)运行单元测试。

感谢@EduardoRFS。感谢这个项目所依赖的所有依赖项的作者:menhir、sedlex、yojson。感谢OCaml和Reason原住民团队。