[cfe-dev] Cquery vs Clangd

Fāng-ruì Sòng via cfe-dev cfe-dev at lists.llvm.org
Fri Mar 2 10:57:09 PST 2018


On 2018-03-02, Manuel Klimek via cfe-dev wrote:
>On Thu, Mar 1, 2018 at 7:50 PM Marc-André Laperle <
>marc-andre.laperle at ericsson.com> wrote:
>
>    Hi Manuel,
>
>    A few relies below.
>
>    On Thu, 2018-03-01 at 13:24 +0000, Manuel Klimek wrote:
>
>        - cquery is based on libclang, while clangd directly works with the AST
>        and provides a non-LSP C++ interface to be integrated as service in
>        larger environments - this lets clagnd work in places where libclang is
>        hard to integrate
>
>    Would that C++ interface be usable for out-of-tree projects? I guess one
>    would simply link to libclangDaemon?
>
>Correct.

I also hope the review mechanism will be more friendly to casual
contributors :)

https://reviews.llvm.org/D40072 https://reviews.llvm.org/D39903
https://reviews.llvm.org/D41575

Look how nik (Qt Creator clang plugin maintainer) desperately begged for
reviewing :(

Hope clangd can be a better replacement of libclang, which kdevelop,
ycmd, rtags, ... and many other projects depend on.

Also hope -index-store-path can change the world :)

>        - clangd wants to integrate with other folks in the community on
>        indexing interfaces and mechanisms that provide a platform for tools to
>        work on; while there is also some prototyping, a lot of work goes into
>        designing the right system
>        - clangd puts scale and performance first; for very very large code
>        bases (significantly larger than chromium), this is a precondition, and
>        (together with the previous item) why we don't have a global index yet
>
>    I think cquery puts those two first but it sounds like you have even more
>    agressive requirements.
>
>Unfortunately, yep :)

I believe C++ interface is a more sustainable long-term approach.
But cquery is sufficient for most projects (Chrome, LLVM, Linux kernel,
... which are considered by most people "large projects").

>
>        - clangd work currently focuses on making code completion really good,
>        so quite a bit of work has gone into how to split the preamble and
>        making completion results better (which also benefits cquery \o/)
>
>        The hope is that clangd at some point will catch up with cquery, but as
>        those things go, in the end they will probably have slightly different
>        trade-offs, so some folks will use one while others use the other. In
>        principle that's the nice thing about the LSP; competition is now
>        possible :)
>
>    Yeah, clients can adopt one of the other pretty easily (well maybe without
>    extension support). I think it's good to understand the different
>    trade-offs and compare the different goals so that potential contributors
>    can decide where to focus their work.

The feature I missed so much is cross references, and I felt really sad
to see that feature is not prioritized. (I am new to LLVM and I need to
get into it)

A rough figure about cquery: loading index files for llvm+clang+extra+lld (715MiB)
takes 50s on a laptop and 7s on a workstation.

>
>Yep. I'd say if one wants to contribute to continuing to build up a platform
>for C++ tooling based on clang, get involved in clangd (I believe this is
>specifically a non-goal for cquery); if one wants to get new useful features as
>fast as possible, cquery is a better place, and the clangd code reviews will
>likely turn out to be a source of frustration, as it often involves getting
>consensus across a range of people from different companies :)
>
>        For everyone interested, come join the talk on clangd at the Euro LLVM
>        in Bristol; that talk will include a more detailed comparison between
>        the two approaches.
>
>    That sounds very good. I'll be there!
>
>    Thank you for your time,
>    Marc-André
>

Thank you!


-- 
宋方睿



More information about the cfe-dev mailing list