Devotd Github
新发现检索增强与搜索

graphersal/graphersal — Gremlin 求值器栈帧缩减

graphersal/graphersal 的最新提交把因正则链接而变大的 GQL 求值器递归帧拆分到独立函数中,避免了 debug 构建中的栈溢出。

仓库信息graphersal/graphersal ↗

graphersal/graphersal 的最新提交把因正则链接而变大的 GQL 求值器递归帧拆分到独立函数中,避免了 debug 构建中的栈溢出。

GitHub 项目说明: In-memory graph database and Gremlin traversal engine in Rust: browser playground, CLI, MCP server for AI agents, durable store, Python bindings.

星标
★ 15
复刻
0
语言
Rust
许可证
Apache-2.0
最新版本
v0.1.1
查看原始来源 ↗在 GitHub 查看 ↗

graphersal/graphersal 是用 Rust 编写的内存图数据库兼 Gremlin 遍历引擎。它同时包含浏览器 playground 和 CLI、面向 AI 智能体的 MCP 服务器,以及 Python 绑定。2026 年 11 月 3 日的提交 9de2d54 修复了 GQL 求值器的栈使用量问题。来源是 https://github.com/graphersal/graphersal/commit/9de2d54。

`=~` 正则匹配链接在递归下钻的 compile_chain 和 eval_chain 中各增加了一个分支,而在未优化的构建中,每个分支都会留下一个用于临时值的栈槽。结果是每嵌套一层栈大约增长 540 字节,因此检查深层嵌套表达式的 deep_expressions_evaluate_without_overflow 测试在 Windows CI 的 debug 构建中超过了设置为 512 KiB 的线程栈,发生了栈溢出。

该提交把很少使用的链接(`=~`、`IS LABELED`、`IS SOURCE / DESTINATION OF`、切片)拆分到 compile_rare_link 和 rare_link 中,使它们各自在独立的帧中编译和求值。根据提交信息中给出的 macOS debug 测量值,该测试的栈使用量为 450 KiB。在加入 `=~` 之前是 452 KiB,加入 `=~` 之后是 484 KiB;嵌套下标用例为 386 KiB,修改之前则是 401 KiB。

不过,这些数字只是 macOS debug 单一环境的测量值,是否在优化构建中出现同样症状并没有记录。改动是单文件 crates/graphersal/src/gql/eval.rs 中的 79 行(新增 56 行,删除 23 行),GQL 的查询语义保持不变,因此对用户可见的功能变化没有。也就是说说公开的证据只有 debug 构建下的栈使用量,因此要判断其对 release 构建性能的影响还为时过早。