Is there a way to speed up parsing?

Hello!

I’ve tried to use libclang and, first of all, for test purposes I’ve indexed LLVM with it (using clang_indexSourceFile with empty callbacks). But the whole process takes about an hour, which is very slow. As far as I know libclang is used in some IDEs as a code assistance provider, but how it could be if it consumes so much time on relatively big projects? The project which I’d like to open is even bigger then LLVM (Mozilla). Is there a way to speed up parsing - for example to parse headers only once (create precompiled header for each parsed header), and then reuse this information in other translation units? Maybe this will lead to some inaccuracy because contexts are different, but performance is a showstopper for me :(. I’m ready to try to hack clang:) if somebody who is familiar with clang will give me a short briefing on how this could be done in principle (or maybe this is just impossible).

Also I have to say that this is a great project and you guys are awesome! To thank you, I have included a link to a cat in a slipper:
http://0.tqn.com/d/cats/1/0/5/I/3/jasp_slipper291x227.jpg

Best regards,

Zurab

If indexing LLVM take more time that compiling it in the first place, you probably do something wrong.
Can you be a little more specific about what you did, and how you did it ?

Are you using a debug build (which is far slower that release build) ?
Have you a sample project so we can try to reproduce it at home ?

– Jean-Daniel

If you're using a debug build of clang, which is the default if building from sources, then I'd expect very poor performance. Try rebuilding in optimized mode ('configure --enable-optimized') and then re-running your test.

  - ½

--disable-assertions also (unless you are using it on unstable target platform).

Thanks, I’ll try to use this option, but it would be strange if it boosts performance significantly.

No, I am using Release+Asserts build

Depending on exactly what information you want to extract, you may be
able to set "SkipFunctionBodies". I found this cut the total parsing
time down to 40% (see
https://github.com/drothlis/clang-ctags/commit/ee7d93ee ).

More generally, I think the consensus is that you have to do the
indexing offline, and then have your IDE query the index.

Have you seen this thread:
http://clang-developers.42468.n3.nabble.com/RFC-A-proposal-for-a-Clang-based-service-architecture-td4024449.html

Dave.

Depending on exactly what information you want to extract, you may be
able to set “SkipFunctionBodies”. I found this cut the total parsing
time down to 40%

Thanks for advice, but I already use option SkipFunctionBodies.

More generally, I think the consensus is that you have to do the
indexing offline, and then have your IDE query the index.

Have you seen this thread:
http://clang-developers.42468.n3.nabble.com/RFC-A-proposal-for-a-Clang-based-service-architecture-td4024449.html

Thanks, I will read it, but it seems this article is not about performance at all (anyway clang must index the whole project).