x/tools/gopls: 急切地计算工作区符号索引

jgovgodb  于 5个月前  发布在  Go
关注(0)|答案(6)|浏览(55)

这是#52602的衍生品,我们将其关闭为仅优化。
在未来,我们应该进一步前进,并在加载时填充工作区符号索引。有一种简单的方法可以做到这一点:在过滤之前,我们在类型检查时总是可以访问每个包的完整AST。如果我们当时急切地计算符号表,它应该是免费的。
然而,我现在还不想这样做,因为在每一代上继承所有这些符号句柄的成本仍然太高,而且我们保留哪些符号句柄的启发式是“全部”,而不仅仅是那些可以从工作区包可达的。
一旦我们对快照数据有更多的控制权,我们就可以重新考虑这种急切的计算。

axr492tv

axr492tv1#

我认为将预先计算的符号信息存储在磁盘上,并从磁盘加载而不是从头开始解析和重建符号信息就足够了。如果这能让Kubernetes的初始符号时间降到1秒以下,就不需要预先构建符号数据。
@adonovan:这可能是一个很好的磁盘索引概念验证。

pes8fvy9

pes8fvy92#

除非有证据表明工作区符号加载时间是个问题,否则我们不要这样做。我还没有听到任何关于工作区符号性能问题的报告。

9q78igpj

9q78igpj3#

我一直在关注,希望在这个领域有更多的活动,但没有发布以提高它。就我个人而言,我不使用工作区符号和go,甚至经常不使用当前文件符号,因为加载时间太长,我最终不得不回到标准的查找和导航。
我想补充一下这个背景,但如果你不想在这方面投资,我完全理解。

fruv7luv

fruv7luv4#

在相对较大的仓库,如Kubernetes中,初始工作区符号加载需要约1秒。您的工作区有多大,以包和/或文件为单位?

kmynzznz

kmynzznz5#

不是那么大!可能与我系统上的其他内容有冲突。我可以启用诊断输出吗?这样我可以给出一些更好的数字来验证行为?我会尝试在代码空间+本地进行,以消除我的机器影响并确认。我怀疑(现在没有证据)过去供应商对此也有一定影响,但对这进行一些A/B测试将让我审查这一点。感谢快速跟进@findleyr!

jogvjijk

jogvjijk6#

我们刚刚发布了gopls的预发布版本,其中包含了一个用于导出工作区统计信息的命令。如果可能的话,您能否安装这个预发布版本并从打开的工作区目录中运行gopls stats命令?

相关问题