मेटा-सर्कुलर मूल्यांकनकर्ता

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

इतिहास
कोराडो बोहम का शोध प्रबंध स्व-होस्टिंग (संकलक)कंपाइलर)|सेल्फ-होस्टिंग कंपाइलर के डिजाइन का वर्णन करता है। उच्च-क्रम के कार्यों को संकलित करने में कठिनाई के कारण, इसके बजाय कई भाषाओं को दुभाषियों के माध्यम से परिभाषित किया गया, सबसे प्रमुख रूप से लिस्प। यह शब्द स्वयं जॉन सी. रेनॉल्ड्स द्वारा गढ़ा गया था, और कंप्यूटर प्रोग्राम की संरचना और व्याख्या पुस्तक में इसके उपयोग के माध्यम से लोकप्रिय हुआ।

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

कुल प्रोग्रामिंग भाषाओं में स्व-व्याख्या
कुल कार्यात्मक प्रोग्रामिंग भाषाएं जो दृढ़ता से सामान्यीकरण कर रही हैं, ट्यूरिंग पूर्ण नहीं हो सकती हैं, अन्यथा प्रोग्राम टाइप-चेक करता है या नहीं, यह देखकर हॉल्टिंग समस्या को हल किया जा सकता है। इसका मतलब है कि ऐसे संगणनीय कार्य हैं जिन्हें कुल भाषा में परिभाषित नहीं किया जा सकता है। विशेष रूप से कुल प्रोग्रामिंग भाषा में एक स्व-दुभाषिया को परिभाषित करना असंभव है, उदाहरण के लिए किसी भी टाइप किए गए लैम्ब्डा कैलकुलस में जैसे कि सरल रूप से टाइप किए गए लैम्ब्डा कैलकुलस, जीन-यवेस गिरार्ड के सिस्टम एफ, या थिएरी कोक्वांड के निर्माण के कैलकुलस। यहाँ, स्व-दुभाषिया से हमारा तात्पर्य एक ऐसे कार्यक्रम से है जो किसी सादे प्रारूप (जैसे वर्णों की एक स्ट्रिंग) में एक स्रोत शब्द का प्रतिनिधित्व करता है और संबंधित सामान्यीकृत शब्द का प्रतिनिधित्व करता है। यह असंभव परिणाम स्व-दुभाषिया की अन्य परिभाषाओं पर लागू नहीं होता है। उदाहरण के लिए, कुछ लेखकों ने प्रकार्यों का उल्लेख किया है $$\pi\,\tau \to \tau$$ स्व-दुभाषियों के रूप में, जहां $$\pi\,\tau$$ का प्रतिनिधित्व प्रकार है $$\tau$$टाइप किए गए शब्द। भ्रम से बचने के लिए, हम इन कार्यों को स्व-पहचानकर्ता के रूप में संदर्भित करेंगे। ब्राउन और पाल्सबर्ग ने दिखाया कि स्व-पहचानकर्ताओं को सिस्टम एफ और सिस्टम एफ सहित कई दृढ़ता से सामान्य करने वाली भाषाओं में परिभाषित किया जा सकता है।&omega;. यह संभव हो गया क्योंकि एन्कोडेड शर्तों के प्रकार उनके प्रतिनिधित्व के प्रकारों में परिलक्षित होते हैं, एक विकर्ण लेम्मा का निर्माण करने से रोकता है। अपने पेपर में, ब्राउन और पाल्सबर्ग पारंपरिक ज्ञान का खंडन करने का दावा करते हैं कि आत्म-व्याख्या असंभव है (और वे विकिपीडिया को पारंपरिक ज्ञान के उदाहरण के रूप में संदर्भित करते हैं), लेकिन वे वास्तव में जो अस्वीकार करते हैं वह आत्म-पहचानकर्ताओं की असंभवता है, एक अलग अवधारणा. अपने अनुवर्ती कार्य में, वे यहां उपयोग की जाने वाली अधिक विशिष्ट स्व-पहचानकर्ता शब्दावली पर स्विच करते हैं, विशेष रूप से इन्हें स्व-मूल्यांकनकर्ताओं से अलग करते हैं, प्रकार $$\pi\,\tau \to \pi\,\tau$$. वे यह भी मानते हैं कि आत्म-मूल्यांकन को लागू करना आत्म-मान्यता की तुलना में कठिन लगता है, और पूर्व के कार्यान्वयन को एक खुली समस्या के रूप में दृढ़ता से सामान्यीकृत भाषा में छोड़ देते हैं।

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

उदाहरण
कई भाषाओं में एक या अधिक मेटा-सर्कुलर कार्यान्वयन होते हैं। यहाँ नीचे एक आंशिक सूची है।

समूहीकृत कालानुक्रमिक क्रम में नीचे से ऊपर की ओर डिज़ाइन किए गए मेटा-परिपत्र कार्यान्वयन वाली कुछ भाषाएँ: फोर्थ (प्रोग्रामिंग भाषा), 1968
 * लिस्प (प्रोग्रामिंग भाषा), 1958
 * योजना (प्रोग्रामिंग भाषा), 1975
 * पिको (प्रोग्रामिंग भाषा), 1997
 * अभिनेतास्क्रिप्ट, 2009?
 * क्लोजर, 2007
 * पोस्टस्क्रिप्ट (प्रोग्रामिंग भाषा), 1982
 * प्रोलॉग, 1972
 * TeX, वर्जिन TeX, 1978 पर आधारित है
 * स्मॉलटॉक, 1980
 * रिबोल, 1997
 * लाल (प्रोग्रामिंग_भाषा), 2011
 * फैक्टर (प्रोग्रामिंग भाषा), 2003

तृतीय पक्षों के माध्यम से मेटा-सर्कुलर कार्यान्वयन वाली कुछ भाषाएँ:
 * जावा (प्रोग्रामिंग भाषा) जैक्स आरवीएम, स्क्वॉक वर्चुअल मशीन, मैक्सिन वर्चुअल मशीन या GraalVM's एस्प्रेसो के माध्यम से
 * स्काला (प्रोग्रामिंग भाषा) Metascala के माध्यम से
 * नार्सिसस के माध्यम से जावास्क्रिप्ट या JS-Interpreter
 * ओज़ (प्रोग्रामिंग भाषा) ग्लिंडा के माध्यम से
 * पायथन (प्रोग्रामिंग भाषा) PyPy के माध्यम से
 * रूबी (प्रोग्रामिंग भाषा) Rubinius के माध्यम से
 * लुआ (प्रोग्रामिंग भाषा) धातु के माध्यम से

यह भी देखें

 * एम-अभिव्यक्ति
 * समजातीयता
 * सेल्फ-होस्टिंग (कंपाइलर) | सेल्फ-होस्टिंग कंपाइलर

बाहरी संबंध

 * Structure and Interpretation of Computer Programs (SICP), online version of full book, accessed 2009-01-18.
 * Metascala