[cfe-dev] Cquery vs Clangd

Manuel Klimek via cfe-dev cfe-dev at lists.llvm.org
Thu Mar 1 05:24:50 PST 2018


On Wed, Feb 28, 2018 at 11:40 PM Marc-André Laperle via cfe-dev <
cfe-dev at lists.llvm.org> wrote:

> Hello,
>
>
> I would like to discuss Cquery [1] in the light of the current development
> of Clangd. Both tools implement the Language Server Protocol for
> C/C++. Cquery seems to be picking up a lot of features which users are
> interested in. Some differences with Clangd are that it uses libclang
> and it is developed on Github outside of the LLVM/Clang tree. Perhaps that
> Clangd has the advantage of having more visibility as it is hosted within
> the Clang community and has healthy (long term??) development activity. But
> being out of tree, Cquery also has some flexibility in reusing more
> third-party library and features are rapidly being prototyped.
>
>
> With that said, should we make an effort to bridge the two projects?
>

I don't think either side will be really interested in this - there are
pretty different fundamental approaches to the two projects.


> I would very much like to hear your thoughts on Cquery, especially from
> fellow Clangd developers.
>

Competition is good :)
Clangd has made some architectural choices that are fundamentally playing a
more long-term game, so it's not surprising that cquery is leading with
features.
The big differences are:
- 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
- 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
- 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
:)

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.

Cheers,
/Manuel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20180301/cb1ba529/attachment.html>


More information about the cfe-dev mailing list