[Discussion] Speed up lsp-mode by using faster json parsing tools

yyoncho想搞大新闻。众所周知lsp-mode慢的死穴在于json解析部分。在Emacs 27以前,Emacs没有原生的JSON解析工具,lsp-mode只能用Elisp的JSON解析工具,这样和lsp服务器交互会花费大量时间在数据编码解码上,导致用户体验不好。

yyoncho计划通过使用25引入的dynamic module。用C这类语言为Emacs提供一个更快的json解析工具,提升lsp-mode的速度。

另外还有人提出可以通过第三方工具吧json转换为sexp,然后让Emacs用read读入达到加速的效果。

各位有什么高见呢?

emacs本身就有C语言的json解析函数

就算是用module,还是生成vector的好

那是27新加的,27还没release呢

让时间去解决这个问题吧

Not constructive

不要忘了

“Lisp魔咒”

27有原生的 JSON解析,但似乎 lsp 没有快多少。也许用第三方的也能解决,一个命令行工具就行。

弱弱的问一句,vim 的 lsp 客户端用起来挺快,vscode 就不用说了,他们的 JSON 处理能否借鉴呢?

既然parse json 是 bottleneck,没人提最新的simdjson么?

vim的json解析是什么做的?是C吗?还是Python?

vim的貌似是用rust写的

那可是快如闪电啊 :open_mouth:

dynamic module 默认不开启是非常错误的策略,以至于这项功能形同虚设好多年。

不是很懂,能否具体解释一下?你是指configure的编译选项么

我觉得另外一个dynamic module不讨喜的原因是跨平台能力不好。

这应该是后话了。

我觉得默认不开启首先要负相当一部分责任。不是有个段子么,谷歌第二页是最佳藏尸地点,所以我认为不可小觑默认关闭带来的消极作用。

1 个赞

确实,很强大的功能,文档也很详细,但是用的人不多。不过可能也是大部分elisp包对性能要求不高的原因