2009-10-22 17 views
9

मैं सिंटैक्स रंग के बारे में पागल हूं, जहां विभिन्न रंगों में विभिन्न स्रोत-कोड तत्व प्रदर्शित होते हैं। आजकल, जब कोड पढ़ने की मेरी क्षमता की बात आती है तो उचित रंग सही इंडेंटेशन के साथ होता है।विजुअल स्टूडियो में सिंटेक्स रंग की ग्रैन्युलरिटी

Tools/Customize/Fonts and Colors के तहत एक नज़र डालने पर, मैं देख सकता हूं कि कुछ मामलों में अच्छी ग्रैन्युलरिटी है; उदाहरण के लिए, आप स्ट्रिंग्स और वर्बैटिम तारों के लिए अलग-अलग रंग दे सकते हैं। क्योंकि वे सब सिर्फ 'पहचानकर्ता' कर रहे हैं,

Controls.Add(combo); 

अब Controls, Add, and combo चीजों के सभी विभिन्न प्रकार होते हैं, फिर भी वे सभी एक ही रंग में गाया जाता है:

लेकिन यहाँ सी # कोड का एक विशिष्ट लाइन है।

निश्चित रूप से उससे अधिक ग्रॅन्युलरिटी पाने का कोई तरीका है? ऑब्जेक्ट्स से कम से कम रंग विधियां अलग-अलग हैं?

+0

+1 ने मुझे इसे का जवाब जानने के लिए इच्छुक के लिए बाहर ग्रे मृत कोड जैसे कुछ अच्छा काम करता है। मैं वर्गों के लिए एक विशिष्ट रंग क्यों नहीं चुन सकता? वस्तुओं? तरीकों? –

उत्तर

14

कुछ विचार।

सबसे पहले, सुविधाओं को डिफ़ॉल्ट रूप से "लागू नहीं किया गया" है। एक सुविधा लागू करने के लिए, किसी को सुविधा के बारे में सोचना होगा। फिर हमें इसे डिज़ाइन करना होगा, इसे निर्दिष्ट करना होगा, इसे कार्यान्वित करना होगा, इसका परीक्षण करना होगा, इसे दस्तावेज करना होगा, इसके लिए एक शिपिंग वाहन ढूंढना होगा, और इसे दरवाजा बाहर निकालना होगा। यदि इनमें से कोई भी चीज नहीं होती है, तो आपको सुविधा नहीं मिलती है। जहां तक ​​मुझे पता है, इन सुविधाओं में से कोई भी इस सुविधा के लिए नहीं हुआ है।

दूसरा, सुविधाओं को उनके शुद्ध लाभों के आधार पर प्राथमिकता दी जाती है - यानी, हमारे ग्राहकों को उनका कुल लाभ, उन्हें लागू करने में हमारी कुल लागत घटाएं। यहां खेलने में बहुत वास्तविक "अवसर लागत" हैं। प्रत्येक सुविधा जिसे हम कार्यान्वित करते हैं वह दर्जनों फीचर्स हैं जिनके लिए हमारे पास बजट नहीं है। इसलिए सुविधाओं को न केवल काम करने के लिए काम करने लायक होना चाहिए, उन्हें हमारे फीचर अनुरोध सूचियों पर मिली हजारों सुविधाओं की तुलना में अधिक फायदेमंद होना चाहिए। यह हासिल करने के लिए एक उच्च बार है; अधिकांश सुविधाएं इसे कभी हासिल नहीं करती हैं।

मेरे तीसरे बिंदु को समझाने के लिए आपको भाषाओं को संसाधित करने के तरीके के बारे में कुछ जानने की आवश्यकता है। हम सोर्स कोड लेते हैं और इसे "टोकन" में लेते हैं - शब्द। इस बिंदु पर हम जानते हैं कि प्रत्येक चरित्र एक संख्या, स्ट्रिंग, कीवर्ड, पहचानकर्ता, टिप्पणी, प्रीप्रोसेसर निर्देश आदि का हिस्सा है या नहीं। लेक्सिंग अविश्वसनीय रूप से तेज़ है; हम keystrokes के बीच एक फ़ाइल को आसानी से फिर से लेक्स कर सकते हैं।

हम तब टोकन की श्रृंखला लेते हैं और उन्हें "अमूर्त वाक्यविन्यास पेड़" में "पार्स" लेते हैं। यह निर्धारित करता है कि कोड के कौन से हिस्से वर्ग, अभिव्यक्ति, स्थानीय परिवर्तनीय घोषणाएं, नाम, असाइनमेंट, जो कुछ भी हैं। पार्सिंग भी तेज़ है, लेकिन जितना तेज़ नहीं है उतना तेज़ है। हम कुछ चालें करते हैं, जैसे कि विधि निकायों को पार्स करना छोड़कर, जब तक कोई वास्तव में उन्हें देख नहीं लेता है।

अंत में, हम सार वाक्यविन्यास पेड़ लेते हैं और उस पर अर्थपूर्ण विश्लेषण करते हैं; यह निर्धारित करता है कि दिया गया नाम एक प्रकार, एक स्थानीय चर, एक नामस्थान, एक विधि समूह, एक क्षेत्र, और इसी तरह से संदर्भित करता है। हम प्रत्येक विधि में प्रत्येक अभिव्यक्ति के प्रकार को निर्धारित करने के लिए कार्यक्रम के प्रकार पदानुक्रम को निर्धारित करने के लिए "शीर्ष स्तर" अर्थपूर्ण विश्लेषण करते हैं, और "विधि स्तर" अर्थपूर्ण विश्लेषण करते हैं। "शीर्ष स्तर" अर्थात् विश्लेषण बहुत तेज़ है, और कोई भी व्यक्तिगत विधि विश्लेषण बहुत तेज है, लेकिन फिर भी, कीस्ट्रोक के बीच पूर्ण अर्थपूर्ण विश्लेषण करना मुश्किल है।

स्पष्ट रूप से हमें इंटेलिजेंस के लिए पूर्ण अर्थपूर्ण विश्लेषण करने की आवश्यकता है, लेकिन हम यह पता लगाने के साथ दूर हो सकते हैं कि आप वर्तमान में किस विधि में टाइप कर रहे हैं, और केवल शीर्ष स्तर और उस विधि के अर्थपूर्ण विश्लेषण कर रहे हैं।

लेकिन रंगीनकरण को पूरी फ़ाइल पर काम करना है; आप उस विधि को रंगीन नहीं कर सकते जो कर्सर अभी में होता है। इसलिए, रंगीनकरण बहुत तेज़ होना चाहिए, इसलिए ऐतिहासिक रूप से हमने ज्यादातर व्याख्यात्मक जानकारी के आधार पर रंगीन किया है।

कभी-कभी हम विशेष सामान जैसे "यह चीज़ शायद एक प्रकार है?" इसे एक अलग रंग देने के लिए। लेकिन जब एक दी गई इकाई है, तो कहें, एक विधि समूह बनाम, कहते हैं, प्रतिनिधि प्रकार के एक क्षेत्र के लिए अर्थपूर्ण विश्लेषण का एक समृद्ध स्तर की आवश्यकता होती है, एक स्तर जिसे हम वर्तमान में प्रत्येक कीस्ट्रोक पर नहीं करते हैं।

अब, ऐसी चीजें हैं जो हम यहां कर सकते हैं। हम टोकन स्ट्रीम में संपादन को समझने के बारे में बेहतर हो सकते हैं, और केवल पेड़ के संपादित हिस्से पर व्याकरणिक और अर्थपूर्ण विश्लेषण को दोहरा सकते हैं। हम अब इस क्षेत्र में कुछ शोध कर रहे हैं, लेकिन यह सिर्फ शोध है; यह वास्तव में इसे उत्पाद में कभी भी नहीं बना सकता है।

+1

आप एक नोट बना सकते हैं कि सक्रिय रूप से संपादित फ़ाइल के लिए उपयोग किया गया एएसटी एक कंपाइलर द्वारा उपयोग किए गए एएसटी से काफी अलग ("अधिक लचीला") है। मैं यह इसलिए कहता हूं क्योंकि मैंने कई लोगों को देखा है जो सोचते हैं कि क्या आप लेक्सिंग और पार्सिंग को समझते हैं तो आप इसे एक स्मार्ट संपादक में सीधे तरीके से बदल सकते हैं, लेकिन यह सच के करीब भी नहीं है। : ओ –

+0

@Eric: व्यापक प्रतिक्रिया के लिए धन्यवाद। मैं वीएस की विशेषताओं की कमी के बारे में चिंतित नहीं था, मैं वास्तव में उम्मीद कर रहा था कि मैं यूआई में कुछ याद करूँगा और रंगीनकरण प्राप्त करने का कोई तरीका था। (जारी) –

+0

स्वयं कई कंपाइलर्स लिखने के बाद, मैं कठिनाइयों की सराहना करता हूं। दूसरी ओर, ऐसा लगता है कि पूर्ण एएसटी की आवश्यकता के बिना इस क्षेत्र में मुझे काफी सुधार किया जा सकता है। मुझे एहसास है कि, क्योंकि किसी दिए गए प्रतीक का उपयोग कई संदर्भों में किया जा सकता है, केवल एक प्रतीक तालिका होने के लिए पर्याप्त नहीं है। उदाहरण के लिए, मैंने आज कोड की इस पंक्ति को अभी लिखा है: सार्वजनिक केस स्टाइल केस स्टाइल {प्राप्त करें; सेट; } पहला केस स्टाइल एक enum है; दूसरा संपत्ति का नाम है, इसलिए उस प्रतीक के साथ अस्पष्टता है। हालांकि, तरीकों के बारे में क्या? व्याख्यात्मक स्तर पर विधि कॉल का पता नहीं लगाया जा सकता है? –

2

मुझे विश्वास है कि ReSharper प्लगइन कुछ उन्नत सिंटैक्स हाइलाइटिंग प्रदान करता है जैसे आप बात कर रहे हैं। अन्य प्लगइन्स भी हो सकते हैं जो एक ही चीज़ (कम लागत पर) प्रदान करते हैं जो कि मैं उपयोग करता हूं। मैं सहमत हूं सिंटैक्स हाइलाइटिंग बहुत उपयोगी है। ReSharper भी यह और भी स्पष्ट करते हैं, वर्तमान पंक्ति को उजागर करना, आदि

-Daniel

+0

मैंने रीशेर्पर के बारे में बहुत कुछ सुना है। दुर्भाग्यवश, अधिकांश परियोजनाओं के लिए मैं एक्सप्रेस का उपयोग करता हूं, जो प्लगइन्स की अनुमति नहीं देता है। –

संबंधित मुद्दे