मैं बिल्कुल नहीं कह सकता कि किसी विशेष कार्यान्वयन द्वारा एल्गोरिदम का क्या उपयोग किया जाता है, लेकिन मैं कुछ शिक्षित अनुमान लगा सकता हूं। एक trie इस समस्या के लिए एक बहुत ही उपयोगी डेटा संरचना है: आईडीई प्रत्येक नोड पर कुछ अतिरिक्त मेटाडाटा के साथ, अपनी परियोजना में प्रतीकों में से सभी की स्मृति में एक बड़ी trie बनाए रख सकते हैं।
जब आप एक वर्ण टाइप करते हैं, तो यह ट्राइ में एक पथ पर चलता है। एक विशेष त्रिगुण के वंशज सभी संभव पूर्णताएं हैं। IDE को केवल उन लोगों द्वारा फ़िल्टर करने की आवश्यकता होती है जो वर्तमान संदर्भ में समझ में आते हैं, लेकिन इसे केवल उतना ही गणना करने की आवश्यकता है जितना कि टैब-पूर्ण पॉप-अप विंडो में प्रदर्शित किया जा सकता है।
अधिक उन्नत टैब-समापन के लिए अधिक जटिल त्रि की आवश्यकता होती है। उदाहरण के लिए, विज़ुअल असिस्ट एक्स में एक विशेषता है जिसके तहत आपको केवल CamelCase प्रतीकों के कैपिटल अक्षरों को टाइप करने की आवश्यकता है - उदाहरण के लिए, यदि आप SFN टाइप करते हैं, तो यह आपको SomeFunctionName
टैब-पूर्ण विंडो में प्रतीक दिखाता है ।
तीनों (या अन्य डेटा संरचनाओं) की गणना करने के लिए आपके प्रोजेक्ट में सभी प्रतीकों की सूची प्राप्त करने के लिए आपके सभी कोड को पार्स करने की आवश्यकता होती है। विजुअल स्टूडियो ने इसे अपने इंटेलीसेन डेटाबेस में संग्रहीत किया है.ncb
संग्रहीत किया है फाइल जो आपके प्रोजेक्ट के साथ संग्रहीत है, ताकि इसे हर बार जब भी आप बंद करें और अपनी परियोजना को फिर से खोलना पड़े, तो उसे वापस नहीं करना पड़े। पहली बार जब आप एक बड़ी परियोजना खोलते हैं (कहते हैं, एक तुम सिर्फ फार्म स्रोत नियंत्रण को सिंक करते हो), वीएस सब कुछ पार्स करने और डेटाबेस उत्पन्न करने के लिए समय लेगा।
मुझे नहीं पता कि यह वृद्धिशील परिवर्तनों को कैसे संभालता है। जैसा कि आपने कहा, जब आप कोड लिख रहे होते हैं, तो यह 90% समय का अमान्य सिंटैक्स होता है, और जब भी आप बेकार होते हैं, तो बहुत कम लाभ के लिए अपने सीपीयू पर एक बड़ा कर लगाते हैं, खासकर यदि आप एक हेडर फ़ाइल को संशोधित कर रहे हैं जिसमें शामिल हैं स्रोत फ़ाइलों की एक बड़ी संख्या।
मुझे संदेह है कि यह या तो (ए) केवल तभी रिपार्स करता है जब आप वास्तव में अपनी परियोजना का निर्माण करते हैं (या संभवतः जब आप इसे बंद / खोलते हैं), या (बी) यह किसी प्रकार का स्थानीय पार्सिंग करता है जहां यह केवल उस कोड को पार्स करता है जहां आप अभी-अभी आए हैं कुछ सीमित फैशन में संपादित, बस संबंधित प्रतीकों के नाम पाने के लिए। चूंकि C ++ में इस तरह का एक उत्कृष्ट जटिल व्याकरण है, इसलिए यदि आप भारी टेम्पलेट मेटाप्रोग्रामिंग और इसी तरह का उपयोग कर रहे हैं तो यह अंधेरे कोनों में अजीब तरह से व्यवहार कर सकता है।