मेटाप्रोग्रामिंग से तात्पर्य कई प्रकार से होता है, जिसमें किसी प्रोग्राम का स्वयं का ज्ञान होता है या खुद को हेरफेर कर सकता है।
C # जैसी भाषाओं में, प्रतिबिंब मेटाप्रोग्रामिंग का एक रूप है क्योंकि कार्यक्रम स्वयं के बारे में जानकारी की जांच कर सकता है। उदाहरण के लिए किसी वस्तु के सभी गुणों की सूची वापस करना।
ActionScript जैसी भाषाओं में, आप नए प्रोग्राम जैसे कि eval ("x" + i) बनाने के लिए रनटाइम पर फ़ंक्शन का मूल्यांकन कर सकते हैं। DoSomething () एक वस्तु को प्रभावित करेगा जिसे X1 कहा जाता है जब मैं 1 और x2 होता है जब मैं 2 होता हूं।
अंत में, मेटाप्रोग्रामिंग का एक और सामान्य रूप है जब कार्यक्रम गैर-तुच्छ फैशन में खुद को बदल सकता है। एलआईएसपी इसके लिए अच्छी तरह से जाना जाता है और लगभग एक दशक पहले पॉल ग्राहम ने इसे बनाया था। मुझे उनके कुछ विशिष्ट निबंध देखने होंगे। लेकिन विचार यह है कि कार्यक्रम अपने राज्य के आधार पर कार्यक्रम का एक और हिस्सा बदल देगा। यह आज के समय में सबसे लोकप्रिय भाषाओं में निर्णय लेने के लिए लचीलेपन के स्तर की अनुमति देता है।
यह भी ध्यान देने योग्य है कि सीधी विधानसभा में प्रोग्रामिंग के अच्छे दिनों में वापस, ऐसे प्रोग्राम जो स्वयं को रनटाइम में बदल देते थे, आवश्यक और बहुत सामान्य थे।
पॉल ग्राहम के निबंध "व्हाट मेड लिस्प डिफरेंट" से :
कई भाषाओं में मैक्रो नाम की कोई चीज होती है। लेकिन लिस्प मैक्रोज़ अद्वितीय हैं। और मानो या न मानो, वे क्या करते हैं, कोष्ठकों से संबंधित है। लिस्प के डिजाइनरों ने भाषा में उन सभी कोष्ठकों को सिर्फ अलग करने के लिए नहीं रखा। ब्लब प्रोग्रामर के लिए, लिस्प कोड अजीब लगता है। लेकिन वे कोष्ठक एक कारण से हैं। वे लिस्प और अन्य भाषाओं के बीच एक बुनियादी अंतर के बाहरी प्रमाण हैं।
लिस्प कोड लिस्प डेटा ऑब्जेक्ट्स से बना है। और न कि तुच्छ अर्थों में कि स्रोत फ़ाइलों में वर्ण होते हैं, और तार भाषा द्वारा समर्थित डेटा प्रकारों में से एक होते हैं। लिस्प कोड, पार्सर द्वारा पढ़ने के बाद, डेटा संरचनाओं से बना होता है, जिसे आप ट्रैवर्स कर सकते हैं।
यदि आप समझते हैं कि कंपाइलर कैसे काम करते हैं, तो वास्तव में क्या चल रहा है इतना नहीं है कि लिस्प में एक अजीब सिंटैक्स है क्योंकि लिस्प में कोई सिंटैक्स नहीं है। आप पार्स पेड़ों में प्रोग्राम लिखते हैं जो संकलक के भीतर उत्पन्न होते हैं जब अन्य भाषाओं को पार्स किया जाता है। लेकिन ये पार्स ट्री आपके कार्यक्रमों के लिए पूरी तरह से सुलभ हैं। आप उन कार्यक्रमों को लिख सकते हैं जो उन्हें हेरफेर करते हैं। लिस्प में, इन कार्यक्रमों को मैक्रोज़ कहा जाता है। वे प्रोग्राम हैं जो प्रोग्राम लिखते हैं।
प्रोग्राम लिखने वाले प्रोग्राम? आप ऐसा कब करना चाहेंगे? बहुत बार नहीं, अगर आप कोबोल में सोचते हैं। हर समय, यदि आप लिस्प में सोचते हैं। अगर मैं एक शक्तिशाली मैक्रो का उदाहरण दे सकता हूं, और यहां कहना है तो यह सुविधाजनक होगा! उस के बारे में कैसा है? लेकिन अगर मैंने किया, तो यह सिर्फ लिबास के बारे में नहीं जानता, जो जिबरिश की तरह दिखाई देगा; वहाँ सब कुछ समझाने के लिए आपको यह जानने की आवश्यकता नहीं है कि इसका क्या मतलब है। में Ansi कॉमन लिस्प मैं जितनी जल्दी साथ के रूप में मैं कर सकता चीजों को स्थानांतरित करने की कोशिश की, और यहां तक कि इसलिए मैं पृष्ठ 160 तक मैक्रो को नहीं मिला।
लेकिन मुझे लगता है कि मैं एक तरह का तर्क दे सकता हूं जो ठोस हो। Viaweb संपादक का स्रोत कोड संभवतः लगभग 20-25% मैक्रोज़ था। मैक्रों को साधारण लिस्प फ़ंक्शंस की तुलना में लिखना कठिन है, और जब आवश्यक नहीं हो तो उनका उपयोग करने के लिए इसे खराब शैली माना जाता है। तो उस कोड में हर मैक्रो है क्योंकि यह होना है। इसका मतलब यह है कि इस कार्यक्रम में कम से कम 20-25% कोड ऐसे काम कर रहे हैं जो आप आसानी से किसी अन्य भाषा में नहीं कर सकते हैं। हालाँकि संदेहजनक ब्लब प्रोग्रामर लिस्प की रहस्यमय शक्तियों के लिए मेरे दावों के बारे में हो सकता है, इसके लिए उन्हें उत्सुक होना चाहिए। हम अपने मनोरंजन के लिए यह कोड नहीं लिख रहे थे। हमारे और हमारे प्रतिस्पर्धियों के बीच तकनीकी बाधाओं को दूर करने के लिए जितना संभव हो सके, हम एक छोटे स्टार्टअप के रूप में प्रोग्रामिंग कर रहे थे।
एक संदिग्ध व्यक्ति आश्चर्यचकित हो सकता है अगर यहाँ कुछ सहसंबंध था। हमारे कोड का एक बड़ा हिस्सा ऐसी चीजें कर रहा था जो अन्य भाषाओं में करना बहुत कठिन है। परिणामी सॉफ़्टवेयर ने हमारे प्रतिद्वंद्वियों के सॉफ़्टवेयर पर काम नहीं किया। शायद किसी तरह का कनेक्शन था। मैं आपको उस धागे का अनुसरण करने के लिए प्रोत्साहित करता हूं। आंख से मिलने की तुलना में उस बूढ़े आदमी के साथ-साथ उसकी बैसाखी पर ज्यादा हो सकता है।