2011-10-12 105 views
7

我最近嘗試KDevelop。它比semantic-complete-self-insertM-Ret快得多(立即)查找符號(變量,函數名稱,類,結構...)。使用M-Ret速度更快,但它沒有像其他IDE那樣好的格式,而是像From nil >這樣的無意義格式。在emacs中,我必須等待至少1秒,在許多情況下,等待CEDET查找所有包含的相關源文件,這需要很長時間。爲什麼在Emacs中使用CEDET的代碼完成如此緩慢?

我使用auto complete clang,但它似乎沒有速度的改善。爲什麼是這樣的:(我愛Emacs和所有,並且一直使用它作爲我的C/C++將近一年,直到我發現KDevelop,但是使用Emacs意味着代碼完成應該是微不足道的並且是可選的?

回答

6

最簡單的答案是很可能KDevelop的DUChain和解析器是用C++編寫的(我推測)使用類似構建的標記管理。CEDET的解析器都在Emacs Lisp中,數據庫和查找也在Emacs Lisp中。完成引擎在Emacs中,它們經常在代碼改變(由於鍵入)的情況下被重建。一旦所有表被構建,CEDET完成引擎可以非常快速地運行。速度更快,並且在閱讀了關於duchain的一些信息之後,它看起來像Kdevelop有一個整個項目的主符號表。 CEDET無法做到這一點,因爲並非所有文件都在項目中,所以每個文件都需要創建一個add-hoc表。我已經知道了很長一段時間,但從來沒有將CEDET的符號數據庫外化,以便可以在單獨的線程(進程)中構建和維護這些表。