Zbadam potencjalne przyspieszenia zakończenia kodu przy użyciu mechanizmu wypełniania kodu klang. Opisany poniżej przepływ został znaleziony w rtags przez Andersa Bakkena.Szybsze kodowanie z clang
Jednostki tłumaczeniowe są analizowane przez pliki monitorowania demonów dla zmian. Robi się to pod nazwą clang_parseTranslationUnit
i powiązanych funkcji (reparse*
, dispose*
). Gdy użytkownik żąda uzupełnienia w danej linii i kolumnie w pliku źródłowym, demon przekazuje buforowaną jednostkę tłumaczeniową dla ostatniej zapisanej wersji pliku źródłowego i bieżącego pliku źródłowego do clang_codeCompleteAt
. (Clang CodeComplete docs).
Flagi przekazane do clang_parseTranslationUnit
(od CompletionThread::process, line 271) to CXTranslationUnit_PrecompiledPreamble|CXTranslationUnit_CacheCompletionResults|CXTranslationUnit_SkipFunctionBodes
. Flagi przekazane do clang_codeCompleteAt
(od CompletionThread::process, line 305) to CXCodeComplete_IncludeMacros|CXCodeComplete_IncludeCodePatterns
.
Połączenie z numerem jest bardzo powolne - uzyskanie ukończenia trwa około 3-5 sekund, nawet w przypadkach, gdy lokalizacja zakończenia jest prawnie dozwolonym kodem dostępu członka, podzestaw zamierzonego przypadku użycia wymienionego w dokumentacji clang_codeCompleteAt
. Wydaje się to o wiele za wolne dzięki standardom tworzenia kodu IDE. Czy istnieje sposób na przyspieszenie tego?
Jakie flagi przekazujesz clang_parseTranslationUnit? – Cameron
@Cameron Flagi przekazane do 'clang_parseTranslationUnit' (z [CompletionThread :: process, linii 271] (https://github.com/Andersbakken/rtags/blob/master/src/CompletionThread.cpp)) to' CXTranslationUnit_PrecompiledPreamble | CXTranslationUnit_CacheCompletionResults | CXTranslationUnit_SkipFunctionBodes'. Flagi przekazane do 'clang_codeCompleteAt' (z [CompletionThread :: process, line 305] (https://github.com/Andersbakken/rtags/blob/master/src/CompletionThread.cpp)) to' CXCodeComplete_IncludeMacros | CXCodeComplete_IncludeCodePatterns'. – Pradhan
Hmm.Jakiego rodzaju plik jest gotowy - czy zawiera wiele nagłówków (np. Boost)? Jakie są opcje kompilacji? Czy Twój libclang jest skompilowany z optymalizacją? Niedługo sam wypróbuję libclanga - sprawdzę, czy dla mnie jest to wolne. – Cameron