मेटाप्रोग्रामिंग और मैक्रो
मेटाप्रोग्रामिंग कार्यक्रमों को ऐसे डेटा के रूप में मानती है जिसे अन्य कार्यक्रम उत्पन्न, निरीक्षण या रूपांतरित कर सकते हैं, जिसमें मैक्रो संकलन समय पर नियंत्रित सिंटैक्टिक अमूर्तन प्रदान करते हैं।
Definition
मेटाप्रोग्रामिंग ऐसे कार्यक्रमों को लिखना है जो अन्य कार्यक्रमों (या स्वयं) का उत्पादन, विश्लेषण या रूपांतरण करते हैं; मैक्रो एक मेटाप्रोग्रामिंग सुविधा है जो संकलन से पहले या उसके दौरान स्रोत सिंटैक्स को विस्तारित कोड में फिर से लिखती है।
Scope
यह विषय उन तकनीकों को शामिल करता है जिनके द्वारा कार्यक्रम, कार्यक्रमों में हेरफेर करते हैं: लेक्सिकल और सिंटैक्टिक मैक्रो, हाइजीनिक मैक्रो विस्तार, संकलन-समय कोड जनरेशन, मल्टी-स्टेज प्रोग्रामिंग, रिफ्लेक्शन और टेम्प्लेट सिस्टम। यह बताता है कि ये तंत्र किसी भाषा के सिंटैक्स और अमूर्तन का विस्तार कैसे करते हैं, जबकि शुद्धता बनाए रखते हैं, विशेष रूप से चर कैप्चर और बाइंडिंग के संबंध में।
Core questions
- सुरक्षित नाम कैप्चर के बिना सिंटैक्टिक अमूर्तन किसी भाषा का विस्तार कैसे कर सकता है?
- संकलन-समय मेटाप्रोग्रामिंग को रनटाइम रिफ्लेक्शन से क्या अलग करता है?
- मल्टी-स्टेज प्रोग्रामिंग प्रोग्राम जनरेशन को निष्पादन से कैसे अलग करती है?
- मेटाप्रोग्रामिंग अमूर्तन में कब सुधार करती है बनाम पठनीयता और टूलिंग को नुकसान पहुँचाती है?
Key theories
- स्वच्छ मैक्रो विस्तार
- कोहलबेकर और उनके सहयोगियों ने स्वच्छ मैक्रो पेश किए, जो विस्तार के दौरान बाउंड वैरिएबल का स्वचालित रूप से नाम बदलते हैं ताकि मैक्रो-जनित कोड गलती से उपयोग स्थल में नामों को कैप्चर न कर सके या उनके द्वारा कैप्चर न हो सके।
- मल्टी-स्टेज प्रोग्रामिंग
- ताहा और शीर्ड ने स्पष्ट एनोटेशन के साथ स्टेज्ड गणना को औपचारिक रूप दिया, जिससे अलग-अलग मूल्यांकन चरणों में कोड उत्पन्न करने और चलाने का एक टाइप किया गया विवरण मिला।
- टेम्प्लेट मेटाप्रोग्रामिंग
- शीर्ड और पेटन जोन्स ने हास्केल में टाइप की गई संकलन-समय मेटाप्रोग्रामिंग जोड़ी, जिससे कार्यक्रमों को संकलन समय पर अमूर्त सिंटैक्स बनाने और उसमें हेरफेर करने की अनुमति मिली।
Clinical relevance
मैक्रो और मेटाप्रोग्रामिंग लाइब्रेरी लेखकों को डोमेन-विशिष्ट अमूर्तन बनाने, बॉयलरप्लेट को खत्म करने और प्रदर्शन के लिए संकलन-समय विशेषज्ञता करने की अनुमति देते हैं। स्वच्छता और स्टेजिंग अनुशासन ही इन शक्तिशाली सुविधाओं को रोजमर्रा के उपयोग के लिए पर्याप्त सुरक्षित बनाते हैं।
History
मैक्रो का इतिहास शुरुआती लिस्प और असेंबली से जुड़ा है, लेकिन अस्वच्छ लिस्प मैक्रो आकस्मिक चर कैप्चर के प्रति प्रवृत्त थे। कोहलबेकर के 1986 के स्वच्छ विस्तार ने इसे हल किया, जिसने स्कीम के सिंटैक्स-नियमों को प्रभावित किया। बाद के काम ने मल्टी-स्टेज प्रोग्रामिंग (MetaML) को औपचारिक रूप दिया और हास्केल, स्काला और रस्ट जैसी भाषाओं में टाइप की गई संकलन-समय मेटाप्रोग्रामिंग लाई।
Debates
- मैक्रो की शक्ति बनाम समझदारी
- भाषा डिजाइनर अप्रतिबंधित सिंटैक्टिक अमूर्तन की अभिव्यंजक शक्ति को पाठकों, डीबगरों और टूलिंग के लिए उत्पन्न होने वाली कठिनाई के मुकाबले तौलते हैं, जो स्वच्छता और अनुशासित मैक्रो सिस्टम को प्रेरित करता है।
Key figures
- Eugene Kohlbecker
- Matthias Felleisen
- Walid Taha
- Tim Sheard
- Simon Peyton Jones
Related topics
Seminal works
- kohlbecker1986
- taha2000
- sheard2002
- abelson1996
Frequently asked questions
- मैक्रो सिस्टम को क्या स्वच्छ बनाता है?
- एक स्वच्छ मैक्रो सिस्टम यह गारंटी देता है कि मैक्रो द्वारा पेश किए गए पहचानकर्ता कॉल साइट पर पहचानकर्ताओं को अनजाने में कैप्चर या छायांकित नहीं करते हैं, और इसके विपरीत, विस्तार के दौरान बाउंड वैरिएबल का व्यवस्थित रूप से नाम बदलकर।
- मेटाप्रोग्रामिंग सामान्य कार्यों से कैसे भिन्न है?
- सामान्य कार्य रनटाइम मानों पर काम करते हैं, जबकि मेटाप्रोग्रामिंग प्रोग्राम प्रतिनिधित्व पर काम करती है, कोड उत्पन्न या रूपांतरित करती है, अक्सर संकलन समय पर, किसी भी रनटाइम मान के मौजूद होने से पहले।