मैं क्लैंग के कोड पूरा करने वाले तंत्र का उपयोग करते हुए संभावित कोड-पूर्ण स्पीडअप की जांच कर रहा हूं। नीचे दिए गए प्रवाह को मैंने rtags में पाया है , एंडर्स बककेन द्वारा।
अनुवाद इकाइयाँ परिवर्तन के लिए डेमॉन मॉनिटरिंग फ़ाइलों द्वारा पार्स की जाती हैं। यह कहा जाता है clang_parseTranslationUnit
और संबंधित कार्यों ( reparse*
, dispose*
) द्वारा किया जाता है । जब उपयोगकर्ता किसी स्रोत फ़ाइल में किसी दिए गए लाइन और कॉलम को पूरा करने का अनुरोध करता है, तो डेमन स्रोत फ़ाइल के अंतिम सहेजे गए संस्करण और वर्तमान स्रोत फ़ाइल के लिए कैश्ड अनुवाद इकाई को पास करता है clang_codeCompleteAt
। ( Clang CodeComplete डॉक्स )।
clang_parseTranslationUnit
( पूर्णविराम से: :: प्रक्रिया, पंक्ति 271 ) को पारित किए गए झंडे हैं CXTranslationUnit_PrecompiledPreamble|CXTranslationUnit_CacheCompletionResults|CXTranslationUnit_SkipFunctionBodes
। clang_codeCompleteAt
( पूर्णविराम से :: :: प्रक्रिया, लाइन 305 ) को पास किए गए झंडे हैं CXCodeComplete_IncludeMacros|CXCodeComplete_IncludeCodePatterns
।
कॉल clang_codeCompleteAt
बहुत धीमा है - उन मामलों में भी पूर्णता प्राप्त करने में लगभग 3-5 सेकंड लगते हैं, जहां पूरा होने वाला स्थान एक वैध सदस्य एक्सेस कोड है, जिसके प्रलेखन में उल्लिखित इच्छित उपयोग के मामले का सबसेट है clang_codeCompleteAt
। यह आईडीई कोड-पूरा करने के मानकों से बहुत धीमा लगता है। क्या इसमें तेजी लाने का कोई तरीका है?
CXTranslationUnit_SkipFunctionBodies
, CXCodeComplete_IncludeMacros
, CXCodeComplete_IncludeCodePatterns
और codebase के साथ मैं काम कर रहा हूँ पर एक महत्वपूर्ण अंतर नहीं देखा था। उन सभी का औसत लगभग 4 सेकंड प्रति पूर्ण होता है। मुझे लगता है कि यह सिर्फ टीयू के आकार के कारण है। बहुत तेजी से CXTranslationUnit_PrecompiledPreamble
सुनिश्चित करता reparseTU
है। हालांकि, यहां तक कि CXTranslationUnit_CacheCompletionResults
, clang_codeCompleteAt
मेरे उपयोग-मामले के लिए दर्दनाक रूप से धीमा है।