返回首页
最新
你好,HN,
我制作了一个用于查询内存中 JavaScript 数据的 TypeScript 库。最初的目标是提供一个比 AlaSQL 更加模块化和轻量的替代方案,但后来有人要求我加入对 SQL/XML 的支持,而我个人觉得这太冗长了。因此,我开始思考,想起了 Virtuoso 的组合 SQL 和 SPARQL 查询,并从中推导出了一些想法。
最终的引擎由一个共享核心组成,提供优化器、查询基础设施等功能,并且可以作为插件添加不同的语言。实现的方式是将这些语言翻译成一个通用代数。得益于这一点,你可以在一个查询中混合多种语言——想象一下,你需要处理一些表格数据,但对于每一行,你想从一个深层树状结构中提取信息。你可以写一个外部的 SQL 查询,并在其中放入一个 XQuery 子查询,这样就可以正常工作。代数本身设计为可扩展的——我不敢妄言覆盖了任何查询语言可能需要的所有内容(但对于每种主要数据模型都有实现的语言——SQL、XQuery 和类似 Cypher 的语言(许可问题))。例如,XQuery 包含两个特有的代数运算符,而无需修改核心。
在 GitHub 的 README 中有一个演示链接,你可以在上面玩查询计划,或在一些示例数据上执行查询。如果你对此项目感兴趣,还有我关于这个项目的毕业论文链接。整个项目去年在 VLDB 上作为演示进行了展示。
这是我超过两年工作的结果,我认为其他人也可能会觉得它有用——主要是因为我能够制作出我满意的文档。这些文档是在大型语言模型的帮助下创建的,但我花了几周的时间来完成,所以希望它们读起来不错。代码本身是手动编写的,唯一的例外是最初的一批回归测试。
显然,现如今每个人都在编写自己的编码工具,因此我将直接切入我工具的不同之处:
* 没有提供 shell 访问的工具。相反,有一系列特定于开发的工具,功能范围受到限制。
* 读写操作受到访问控制的限制。项目文件可以在不提示的情况下读取,而被 git 忽略的文件和点文件则不能。
* 附带的 MCP 集成仅限于只读访问。没有用于 git add 和 commit 的工具。
* 也许最大的不同在于分开的驱动模式和导航模式。在驱动模式下,Opair 的工作方式与其他工具类似,但代理的自主性较低。在导航模式下,代理根本无法访问可写工具,而是监控您在常规编辑器中所做的更改。这个想法是模仿与人类配对程序员的关系。
为什么会有人构建这个呢?因为我想要更少的自主权,而不是更多。我不想在实施推送结束时阅读大量的差异,我希望在整个过程中都能参与其中。Opair 是我尝试使人类与代理之间的关系更像配对编程,而不是代码审查的努力。
我在一份哲学文档中写了更多内容:
[https://www.opairdev.org/philosophy](https://www.opairdev.org/philosophy)