下载的clangd 9.0的版本尝鲜,发现用开启索引后会崩溃.看日志应该是字符集导致的.然后我特意看了看clangd的索引与ccls的索引.发现clangd的索引文件好小啊.
ccls
clangd不知道ccls的索引还有没有优化的余地
下载的clangd 9.0的版本尝鲜,发现用开启索引后会崩溃.看日志应该是字符集导致的.然后我特意看了看clangd的索引与ccls的索引.发现clangd的索引文件好小啊.
ccls
clangd不知道ccls的索引还有没有优化的余地
ccls索引有優化餘地,主要在於把Indexer{Func,Type,Var}
體積減小。最近有個改動實現了一個優化:
Change containers of Query*::Def fields from std::vector to ccls::Vec
Query*::Def contain several immutable std::vector fields. Change them to
ccls::Vec to save bytes which were wasted by `capacity`.
另外可以參考clangd RIFF設計,比如提取字串池,提取RoleSlab單獨存儲等。
clangd索引檔案很小的一個重要原因是:clangd-indexer --executor=all-TUS compile_commands.json > clangd.dex
和clangd -background-index
檢索non-local符號而ccls/cquery檢索所有符號。但每個符號,clangd存儲量大於ccls,加載到記憶體後開銷也大於ccls。
textDocument/hover
纔會顯示。需要實時性的textDocument/completion
和textDocument/publishDiagnostics
採用獨立的機制。MergedIndex(-index, MergedIndex(-background-index, -index-file))
不支援incremental update。爲了性能考慮還要構建dex索引,每次重建會有CPU開銷。clangd實時性好的做法可以考慮用到textDocument/hover
等方法中。我一直關注他們開發看有什麼能用於改進ccls的地方:)
Add initialization option index.initialNoLinkage: false by MaskRay · Pull Request #345 · MaskRay/ccls · GitHub 現在ccls HEAD記憶體佔用應該小了很多,cache files稍微小了一點。
明天重新编译一份试试。ccls我重度使用。感觉越来越好用了