为什么在Emacs中使用CEDET进行代码完成的速度如此之慢?

Amu*_*umu 7 c++ emacs cedet

我最近尝试了KDevelop.它比(semantic-complete-self-insert或)快得多(立即)查找符号(变量,函数名,类,结构...)M-Ret.使用M-Ret速度更快,但它没有像其他IDE一样好的格式,而是像无意义的那样 From nil >.在emacs中,我必须等待至少~1秒,在许多情况下,等待CEDET查找所有包含的相关源文件,这需要很长时间.

我用过auto complete clang,但似乎没有速度提升.为什么会这样:(?我喜欢Emacs和所有,并且在我发现KDevelop之前已经将它用于我的C/C++近一年,但使用Emacs意味着代码完成应该是微不足道的和可选的?

Eri*_*ric 6

这个最简单的答案很可能就是KDevelop的DUChain和解析器是用(我推测)C++编写的,它具有类似构建的令牌管理.CEDET的解析器都在Emacs Lisp中,数据库和查找也在Emacs Lisp中.虽然在Emacs中对完成引擎的调用之间构建并缓存了一些表,但是在代码更改时(由于键入),它们经常被重建.构建所有表后,CEDET完成引擎可以非常快.

我已经在代码完成上运行了许多配置文件以使事情变得更快,在阅读了一些关于duchain之后,看起来KDevelop有一个用于整个项目的主符号表.CEDET无法执行此操作,因为并非所有文件都在项目中,因此每个文件都需要创建一个临时表.我已经了解了很长一段时间,但从未将CEDET的符号数据库外部化,以便可以在单独的线程(进程)中构建和维护这些表.