[cfe-dev] ClangD
Nikolai Kosjar via cfe-dev
cfe-dev at lists.llvm.org
Thu Jan 26 06:32:54 PST 2017
On 01/25/2017 02:11 PM, Manuel Klimek via cfe-dev wrote:
> Hi fellow clang devs,
>
> we wanted to let you know that we're (finally) starting up work on
> ClangD, which you might know from email threads such as [1] (June 2012!).
>
> In the meantime, YCM had done a good enough job at packaging up a
> libclang interface to our favorite editors, and other priorities (like
> modules) have eaten up a lot of folks priority lunches.
>
> What has changed?
> 1. YCM is starting to develop more and more into a language multiplexer,
> with other languages (Go, Typescript, etc) providing their own servers
> to talk to
> 2. MS has created a language server protocol [2], which already has both
> a bunch of client and server implementations
> 3. Debugging through python into libclang crashers is a pain and eating
> our support resources
> 4. While libclang is a good abstraction if you want to have something
> run in your process with close coupling, a standard protocol like the
> language server protocol seems like a better way to allow fast
> iterations on the server implementation without the need to keep
> backward-compatibility hacks through a restrictive C API.
>
> One of the cool things about the MS language server protocol is that it
> seems to not actually do any networking, which means that we do not need
> to introduce any new dependencies into clang-tools-extra, which is where
> we want to start developing this.
>
> If you have any thoughts / concerns let me know; otherwise look forward
> to code reviews on initial ClangD dropping by :D
[Huch, my first association with "ClangD" was support for the D language]
Hi!
We from the Qt Creator IDE team are also interested in this. :)
Some notes:
1. You've indirectly referenced the initial design document at [1]. Will
this get an update or is it already updated somewhere else? An updated
document clarifying the scope and goals would be probably useful to all
interested parties, also in regard to contribution and how to align own
current development that uses libclang/libtooling/clang tools.
E.g. Qt Creator also already launches a separate process
("clangbackend") that makes use of libclang to provide the basic
functionality like updated diagnostics, highlighting information and
results for completion requests.
2. How is clangd related to "clang-refactor" [2]?
If it's not related at all, what's the state of clang-refactor?
3. I take this opportunity to share our biggest problems with libclang
from the Qt Creator perspective since clangd users will probably face
them also (as far as I understand, clangd will be based upon libclang -
please correct me if I'm wrong). I share this in hope that they will be
addressed or taken into consideration during the development of clangd
for the benefit of all interested parties now that the development of
clangd is announced. Please keep in mind that the actual problems might
be in other components that libclang makes use of.
The problems we are facing with libclang, in this order, are:
3.1 Windows-specific issues
The whole performance of parse/reparse in general is worser than on
Mac/Linux (probably also because of slow IO on Windows). At the end of
the day, this makes it less usable on Windows for real-world
projects/files. There are also other Windows-specific issues.
My gut feeling is that there aren't that many libclang users on Windows.
@Manual: To which extend do you or your team use and develop on Windows?
Are any Windows developers working on clangd?
Concrete issues are:
* Preamble is also generated for the second reparse on Windows
https://llvm.org/bugs/show_bug.cgi?id=28535
* Problems with FileManager caches leading to leaking file descriptors
https://reviews.llvm.org/D27810
* Very slow reparsing for big header and even slower with
preamble-generation enabled (might be related to the one above)
https://llvm.org/bugs/show_bug.cgi?id=31353
* Windows: Crash with absolute path with forward slashes
https://llvm.org/bugs/show_bug.cgi?id=28381
3.2 Synchronous/blocking API
Low-latency completion results at all times are impossible with a single
CXTranslationUnit that is just being parsed or reparsed. This gets worse
the longer the parse/reparse takes (hello Windows).
One can mitigate this by triggering the parse/reparse after a
significant timeout of user-typing-inactivity, but this leads to a
sluggish experience regarding new diagnostics and highlighting
informations (you don't want to wait more than 2s for new diagnostics to
see if your code is valid now).
Another approach is to use two CXTranslationUnits per file, so at least
there is always a non-blocking CXTranslationUnits ready for completion
requests. Downside is doubled memory consumption and potentially
threading issues (@Manual: do they still exist or are they already
resolved?).
3.3 libclang requires unsaved files to exist on disk.
If the unsaved file does not exist a preamble generation will happen for
every reparse which simply takes to long.
For the concrete use case, refer to
https://llvm.org/bugs/show_bug.cgi?id=31112
This one might be also a problem if you do version control checkouts and
files suddenly vanish.
Best regards,
Nikolai
[1] https://github.com/chandlerc/llvm-designs/blob/master/ClangService.rst
[2] http://lists.llvm.org/pipermail/cfe-dev/2016-September/050641.html
>
> Cheers,
> /Manuel
>
> [1] http://lists.llvm.org/pipermail/cfe-dev/2012-June/022028.html
> [2] https://github.com/Microsoft/language-server-protocol
>
>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
More information about the cfe-dev
mailing list