“收集”与“匆忙前往”·西蒙·马洛

主要观点:尝试用 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 使用等。
阅读 10
0 条评论