主要观点:尝试用 Glean 索引 Hackage 并与 hiedb 比较,展示 Glean 在性能和灵活性方面的优势,同时介绍 Glean 的背景、架构及后续改进方向。
关键信息:
- Glean 是 Meta 开发的代码索引系统,用于多种语言,开源版有多种语言的索引器,支持 SCIP。
- hiedb 是 Haskell 的代码索引系统,将 GHC 生成的.hie 文件写入 SQLite 数据库。
- Glean 可直接处理.hie 文件获取更丰富信息,性能上索引 hackage 时 Glean 比 hiedb 快,生成的数据库更小,find-references 和 find-definition 操作也更快。
- 可通过 Glean 进行多种查询,如不区分大小写的前缀搜索、识别死代码等。
- 构建 Glean 较复杂,需处理棘手依赖,运行 Glean 需启动服务器以提高性能。
- 下一步计划包括索引类型、处理记录选择器的问题、生成 Haddock 文档、考虑 HLS 使用 Glean 等。
重要细节: - 比较索引性能时 hiedb 耗时 1021s,Glean 耗时 470s,生成数据库大小 hiedb 为 5.2GB,Glean 为 0.8GB。
- find-references 操作中 hiedb 耗时 2.3s,Glean 通过 Glass 耗时 0.39s,原始查询耗时 0.03s。
- find-definition 操作中 hiedb 耗时 0.18s,Glean 通过 Glass 耗时 0.05s,原始查询耗时 0.01s。
- 构建 Hackage 时使用 Stackage LTS 快照和特定 cabal.project 文件,经过多次尝试完成构建。
- Glean 的 Haskell 索引器在特定 pull request 中,构建较复杂需处理依赖。
- Glean 支持的存储派生谓词可用于快速 find-references。
- 后续计划包括索引类型、处理记录选择器、生成文档、考虑 HLS 使用等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。