मेटाप्रोग्रामिंग विभिन्न तरीकों से संदर्भित करता है कि किसी प्रोग्राम को स्वयं का ज्ञान होता है या खुद को कुशल बना सकता है।
सी # जैसी भाषाओं में, प्रतिबिंब मेटाप्रोग्रामिंग का एक रूप है क्योंकि कार्यक्रम स्वयं के बारे में जानकारी की जांच कर सकता है। उदाहरण के लिए किसी ऑब्जेक्ट की सभी गुणों की एक सूची लौटाना।
एक्शनस्क्रिप्ट जैसी भाषाओं में, आप eval ("x" + i) जैसे नए प्रोग्राम बनाने के लिए रनटाइम पर फ़ंक्शंस का मूल्यांकन कर सकते हैं। कुछ ऐसा (x) एक ऑब्जेक्ट को प्रभावित करेगा जब मैं 1 और x2 हूं जब मैं 2 हूं।
अंत में, मेटाप्रोग्रामिंग का एक और आम रूप तब होता है जब प्रोग्राम स्वयं को गैर-तुच्छ फैशन में बदल सकता है। एलआईएसपी इस के लिए अच्छी तरह से जाना जाता है और कुछ दशकों पहले पॉल ग्राहम ने चैंपियनशिप किया था। मुझे अपने कुछ विशिष्ट निबंधों को देखना होगा। लेकिन विचार यह है कि कार्यक्रम अपने राज्य के आधार पर कार्यक्रम का एक और हिस्सा बदल देगा। यह रनटाइम पर निर्णय लेने के लिए लचीलापन का स्तर प्रदान करता है जो आज की सबसे लोकप्रिय भाषाओं में बहुत मुश्किल है।
यह भी ध्यान देने योग्य है कि सीधे ओल 'प्रोग्रामिंग के दिनों में सीधे असेंबली में प्रोग्रामिंग, प्रोग्राम जो रनटाइम पर खुद को बदलते थे, आवश्यक थे और बहुत आम थे।
पॉल ग्राहम निबंध "What Made Lisp Different" से:
कई भाषाओं है कुछ एक मैक्रो कहा जाता है। लेकिन लिस्प मैक्रोज अद्वितीय हैं। और विश्वास करते हैं या नहीं, वे क्या करते हैं कोष्ठक से संबंधित है। लिस्प के डिजाइनरों ने भाषा में केवल अलग-अलग होने के लिए सभी को नहीं रखा। ब्लब प्रोग्रामर को, लिस्प कोड अजीब लग रहा है। लेकिन उन कोष्ठक एक कारण के लिए हैं। वे लिस्प और अन्य भाषाओं के बीच मौलिक अंतर के बाहरी सबूत हैं।
लिस्प कोड लिस्प डेटा वस्तुओं से बाहर कर दिया गया है। और तुच्छ अर्थ में नहीं कि स्रोत फ़ाइलों वर्ण होने, और तार डेटा भाषा के द्वारा समर्थित प्रकारों में से एक हैं। लिस्प कोड, के बाद यह पार्सर द्वारा पढ़ा है, डाटा संरचनाओं कि आप पार कर सकते हैं से बना है।
यदि आप समझते हैं कि कैसे compilers काम, क्या वास्तव में हो रहा है इतना लिस्प के रूप में है कि लिस्प एक अजीब वाक्य रचना है कि कोई वाक्य रचना है नहीं है। आप पार्स पेड़ों में प्रोग्राम लिखते हैं जो संकलक के भीतर उत्पन्न करते हैं जब अन्य भाषाएं पार्स की जाती हैं। लेकिन इन पार्स पेड़ आपके प्रोग्रामों के लिए पूरी तरह से पहुंच योग्य हैं। आप प्रोग्राम लिख सकते हैं जो उन्हें कुशल बनाते हैं। लिस्प में, इन कार्यक्रमों को मैक्रोज़ कहा जाता है। वे प्रोग्राम हैं जो प्रोग्राम लिखते हैं।
प्रोग्राम जो प्रोग्राम लिखते हैं? जब क्या आप कभी ऐसा करना चाहते हैं? यदि आप कोबोल में सोचते हैं तो बहुत बार नहीं। यदि आप Lisp में सोचते हैं, तो सभी समय। यह यहां सुविधाजनक होगा यदि मैं शक्तिशाली मैक्रो, का उदाहरण दे सकता हूं और कह सकता हूं! उस के बारे में कैसा है? लेकिन अगर मैंने किया, तो यह किसी ऐसे व्यक्ति को अस्पष्ट दिखाई देगा जो लिस्प नहीं जानता था; को समझाने के लिए यहां कोई कमरा नहीं है जिसे आपको पर जानना आवश्यक है, इसका अर्थ क्या है इसका अर्थ है। Ansi Common Lisp में मैं के रूप में मैं कर सकता के रूप में तेजी से साथ चीजों को स्थानांतरित करने की कोशिश की, और यहां तक कि इतना मैं पेज 160
तक मैक्रो को नहीं मिला लेकिन मुझे लगता है मैं तर्क यह है कि कायल हो सकता है का एक प्रकार दे सकते हैं। Viaweb संपादक का स्रोत कोड शायद लगभग 20-25% मैक्रोज़ था। मैक्रो लिखने के लिए कठिन साधारण लिस्प कार्यों से कर रहे हैं, और यह उन्हें उपयोग करने के लिए बुरा शैली जब वे आवश्यक नहीं कर रहे हैं माना जाता है। तो उस कोड में प्रत्येक मैक्रो ऐसा इसलिए है क्योंकि यह होना चाहिए। क्या इसका मतलब है कि के कम से कम 20-25% इस कार्यक्रम में कोड चीजें हैं जो आप आसानी से किसी अन्य भाषा में ऐसा नहीं कर सकते कर रहा है। हालांकि उलझन Blub प्रोग्रामर लिस्प की रहस्यमय शक्तियों के लिए मेरी दावों के बारे में हो सकता है, यह उसे उत्सुक बनाना चाहिए। हम इस कोड को हमारे अपने मनोरंजन के लिए नहीं लिख रहे थे। हम एक छोटे स्टार्टअप थे, प्रोग्रामिंग जितना कठिन हो सके उतना कठिन हम में तकनीकी अवरोध हमारे और हमारे प्रतिस्पर्धियों के बीच रखने के लिए कर सकते थे।
एक संदिग्ध व्यक्ति आश्चर्य करने के लिए शुरू हो सकता है अगर कोई सहसंबंध था यहां। हमारे कोड का एक बड़ा हिस्सा ऐसी चीजें कर रहा था जो को अन्य भाषाओं में करना मुश्किल है। परिणामस्वरूप सॉफ़्टवेयर ने हमारे प्रतिस्पर्धियों को सॉफ़्टवेयर नहीं किया। शायद किसी प्रकार का कनेक्शन था। मैं उस धागे का पालन करने के लिए को प्रोत्साहित करता हूं। उस बूढ़े आदमी को के साथ आंखों की तुलना में अपने क्रश पर अधिक हो सकता है।
आपको इस जवाब में रुचि हो सकती है http://stackoverflow.com/questions/2565572/metaprogramming-self-explanatory-code-tutorials-articles-books/2566561#2566561 – ewernli
@ewernli: वह उत्तर वास्तव में किसी से भी बेहतर है यहां जवाबों का! –