मुझे आश्चर्य है कि एफ # में अवांछित/टाइप किए गए कोड कोटेशन और मैक्रो सिस्टम की स्वच्छता के बीच कोई संबंध है या नहीं। क्या वे एक ही मुद्दे को अपनी संबंधित भाषाओं में हल करते हैं या क्या वे अलग-अलग चिंताओं हैं?क्या एफ # और मैक्रो स्वच्छता में untyped/टाइप कोड कोडेशन के बीच कोई रिश्ता है?
उत्तर
कोटेशन मेटा प्रोग्रामिंग का एक रूप है। वे आपको प्रोग्रामेटिक रूप से अमूर्त वाक्यविन्यास पेड़ों में हेरफेर करने की अनुमति देते हैं, जिसे कोड में विभाजित किया जा सकता है, और मूल्यांकन किया जा सकता है।
टाइप किए गए उद्धरण मेजबान भाषा के प्रकार सिस्टम में एएसटी के संशोधित प्रकार को एम्बेड करते हैं, इसलिए वे सुनिश्चित करते हैं कि आप कोड के खराब टाइप किए गए टुकड़े उत्पन्न नहीं कर सकते हैं। अनचाहे उद्धरण उस गारंटी की पेशकश नहीं करते हैं (यह रनटाइम त्रुटि के साथ विफल हो सकता है)।
एक तरफ के रूप में, टाइप उद्धरण टेम्पलेट हास्केल quasiquotations के समान दृढ़ता से समान हैं।
लिस्प-जैसी भाषाओं में हाइजेनिक मैक्रोज़ संबंधित हैं, जिसमें वे मेटा प्रोग्रामिंग का समर्थन करने के लिए मौजूद हैं। हालांकि स्वच्छता सरल नाम कैप्चर भ्रम के लिए है, कुछ जो अर्ध उद्धरण टाइप करते हैं, पहले से ही (और अधिक) से बचते हैं।
तो हाँ, वे समान हैं, कि वे क्रमशः टाइप और अनियमित भाषाओं में मेटा प्रोग्रामिंग के लिए तंत्र हैं। टाइप किए गए अर्ध उद्धरण और हाइजेनिक मैक्रोज़ दोनों पूरी तरह से untyped, unsound मेटा प्रोग्रामिंग के लिए अतिरिक्त सुरक्षा जोड़ें। गारंटी के स्तर वे प्रोग्रामर की पेशकश हालांकि अलग है। टाइप किए गए उद्धरण सख्ती से मजबूत हैं।
मेटा-प्रोग्रामिंग पहलू एकमात्र समानता है, और यहां तक कि उस संबंध में, एक बड़ा अंतर है। आप मैक्रो के ट्रांसफॉर्मर को सिंटैक्स से सिंटैक्स के फ़ंक्शन के रूप में सोच सकते हैं जैसे कि आप कोटेशन में हेरफेर कर सकते हैं, लेकिन ट्रांसफार्मर वैश्विक रूप से समन्वयित होते हैं ताकि बाइंडर्स के रूप में उपयोग किए जाने वाले नाम एक विशिष्ट प्रोटोकॉल का पालन करें:
1) बाइंडर्स समान नहीं हो सकते मैक्रो में इनपुट में कोई भी मुफ्त नाम (जब तक कि आप एक अस्पष्ट बचपन का उपयोग नहीं करते)
2) मैक्रो के विस्तार में मुक्त मैक्रो परिभाषा के संदर्भ में बंधे नाम मैक्रो उपयोग समय पर एक ही चीज़ को इंगित करना चाहिए। (इसे वैश्विक समन्वय की आवश्यकता है)
नामों के लिए विकल्प बनाए गए हैं ताकि यदि आप गलत नाम का उपयोग करते हैं तो विस्तार विफल नहीं होता है (जब तक कि यह पता न हो कि वह नाम अनबाउंड है)।
टाइप किए गए उद्धरणों के ट्रांसफॉर्मर में यह परिभाषा समय संदर्भ विचार नहीं है। आप एक प्रोग्राम बनाने के लिए कोटेशन में हेरफेर करते हैं जो आपके प्रोग्राम में किसी भी नाम का संदर्भ नहीं देता है। वे एक वाक्य रचनात्मक अमूर्त तंत्र प्रदान करने के लिए नहीं हैं। वाक्यविन्यास के मनमानी आकार? नहीं। यह सब कोर एएसटी आकार होना चाहिए।
टाइप किए गए उद्धरण प्रणाली में खुले कोड को किसी भी संदर्भ के साथ बंद किया जा सकता है जो अपेक्षित संदर्भ की प्रकार संरचना को फिट करता है - एक सुसंगत संरचना में कई खुले घटकों की कोई समन्वित संरचना नहीं है।
- 1. एफ # में नामस्थान और मॉड्यूल के बीच क्या अंतर है?
- 2. एफ # में IDelegateEvent और IEvent के बीच क्या अंतर है?
- 3. रिश्ता
- 4. टी <'a> और 'एफ में एफ' के बीच कोई अंतर?
- 5. एफ (कॉन्स स्ट्रिंग और) और एफ (कॉन्स स्ट्रिंग) के बीच कोई अंतर?
- 6. रिश्ता
- 7. एक्सओथ और ओथ के साथ इसका रिश्ता क्या है?
- 8. रिश्ता
- 9. "ए" ढेर और "द" ढेर के बीच का रिश्ता क्या है?
- 10. स्वच्छता PHPSESSID
- 11. क्या कोई इकाई और वस्तु के बीच कोई अंतर है?
- 12. एफ # कोड
- 13. एफ # कोड संगठन: प्रकार और मॉड्यूल
- 14. क्या log4net.Config.BasicConfigurator.Configure() और log4net.Config.XmlConfigurator.Configure() के बीच कोई अंतर है?
- 15. एसवीएन विकास और रिलीज प्रक्रिया - स्वच्छता जांच
- 16. डेटा और कोड के बीच क्या अंतर है?
- 17. क्या window.localStorage और localStorage के बीच कोई अंतर है?
- 18. सी में मैक्रो स्थिरांक और निरंतर चर के बीच क्या अंतर है?
- 19. एफ #: वास्तविक शब्दों में, "स्ट्रिंग" और "स्ट्रिंग विकल्प" के बीच क्या अंतर है?
- 20. असेंबली कोड और बाइटकोड के बीच क्या अंतर है?
- 21. जावा कोड में प्रत्यय 'एफ' का क्या अर्थ है?
- 22. कोड पेज और वर्ण एन्कोडिंग के बीच क्या अंतर है?
- 23. क्या सी मैक्रो में उद्धरण हटाने का कोई तरीका है?
- 24. रूबी में, 'नया' और 'प्रारंभिक' के बीच का रिश्ता क्या है? प्रारंभ करते समय शून्य कैसे वापस करें?
- 25. क्या डीबग और रिलीज के बीच कोई (प्रदर्शन) अंतर है?
- 26. क्या कोई मैक्रो और बिल्ट-इन के बीच के अंतर को सुरक्षित रूप से अनदेखा कर सकता है?
- 27. सी ++ मैक्रो कोड
- 28. कैसे एक्सेल मैक्रो कोड
- 29. जावा: मैक्रो और माइक्रो बेंचमार्क के बीच अंतर
- 30. रिश्ता आदेश
मैं मानता हूं, हालांकि मुझे लगता है कि मैं इसे अलग-अलग वाक्यांश दूंगा, क्योंकि मुझे लगता है कि स्वच्छता और 'टाइप' यहां ऑर्थोगोनल अवधारणाएं हैं (दोनों अलग-अलग प्रकार की 'सुरक्षा') जोड़ती हैं; मुझे लगता है कि सभी एफ # उद्धरण हाइजेनिक हैं, और कुछ स्थिर (मेटा-) स्थिर टाइपिंग के माध्यम से अतिरिक्त सुरक्षा जोड़ते हैं। – Brian