मेटा-परिपत्र मूल्यांकनकर्ता

From alpha
Jump to navigation Jump to search

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


इतिहास

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


स्व-व्याख्याकार

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


स्व-व्याख्याकार से अमूर्त मशीन तक

यह भाग डैनवी की थीसिस की धारा 3.2.4 पर आधारित है। [9] यहाँ एक स्व-मूल्यांकनकर्ता का मूल है पथरी. का सार वाक्यविन्यास कैलकुलस है OCaml में निम्नानुसार कार्यान्वित किया गया है, उनके साथ चर का प्रतिनिधित्व किया गया है डी ब्रुइज़न सूचकांक, यानी, उनके शाब्दिक ऑफसेट के साथ (0 से शुरू):

type term = IND of int    (* de Bruijn index *)
          | ABS of term
          | APP of term * term

मूल्यांकनकर्ता एक वातावरण का उपयोग करता है:

type value = FUN of (value -> value)

let rec eval (t : term) (e : value list) : value =
  match t with
    IND n ->
     List.nth e n
  | ABS t' ->
     FUN (fun v -> eval t' (v :: e))
  | APP (t0, t1) ->
     apply (eval t0 e) (eval t1 e)
and apply (FUN f : value) (a : value) =
  f a

let main (t : term) : value =
  eval t []

मान (प्रकार का) value) अभिव्यंजक मूल्यों को मिश्रित करें (द किसी परिवेश में किसी अभिव्यक्ति के मूल्यांकन का परिणाम) और निरूपणीय मान (पर्यावरण में चर द्वारा दर्शाए गए मान), a शब्दावली जो क्रिस्टोफर स्ट्रेची के कारण है। [10] [11] परिवेशों को निरूपणीय मूल्यों की सूची के रूप में दर्शाया जाता है।

मुख्य मूल्यांकनकर्ता के तीन खंड हैं:

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

यह मूल्यांकनकर्ता उसमें रचनाशीलता का सिद्धांत है इसकी प्रत्येक पुनरावर्ती कॉल दिए गए उचित उप-भाग पर की जाती है अवधि। यह डोमेन के बाद से उच्च-क्रम का कार्य भी है मानों का एक फ़ंक्शन स्थान है।

डेफिनिशनल इंटरप्रिटर्स में, रेनॉल्ड्स ने इस सवाल का जवाब दिया कि क्या ऐसा स्व-दुभाषिया अच्छी तरह से परिभाषित है। उन्होंने नकारात्मक उत्तर दिया क्योंकि परिभाषित भाषा (स्रोत भाषा) की मूल्यांकन रणनीति परिभाषित भाषा (मेटा-भाषा) की मूल्यांकन रणनीति द्वारा निर्धारित की जाती है। यदि मेटा-भाषा मूल्य के अनुसार कॉल का अनुसरण करती है (जैसा कि OCaml करता है), तो स्रोत भाषा मूल्य के अनुसार कॉल का अनुसरण करती है। यदि मेटा-भाषा नाम से कॉल का अनुसरण करती है (जैसा कि अल्गोल 60 करता है), तो स्रोत भाषा नाम से कॉल का अनुसरण करती है। और यदि मेटा-भाषा आवश्यकता के अनुसार कॉल का अनुसरण करती है (जैसा कि हास्केल करता है), तो स्रोत भाषा आवश्यकता के अनुसार कॉल का अनुसरण करती है।

डेफिनिशनल इंटरप्रेटर्स में, रेनॉल्ड्स ने एक स्व-दुभाषिया को उसकी परिभाषित भाषा की मूल्यांकन रणनीति से स्वतंत्र बनाकर अच्छी तरह से परिभाषित किया। उन्होंने स्व-व्याख्याकार को निरंतरता-गुजरने वाली शैली में परिवर्तित करके मूल्यांकन रणनीति तय की, जो कि मूल्यांकन-रणनीति स्वतंत्र है, जैसा कि बाद में गॉर्डन डी. प्लॉटकिन के स्वतंत्रता प्रमेय में कैद किया गया। [12] इसके अलावा, क्योंकि तार्किक संबंधों की अभी तक खोज नहीं हुई थी, रेनॉल्ड्स ने परिणामी निरंतरता-पासिंग मूल्यांकनकर्ता को (1) समापन (कंप्यूटर प्रोग्रामिंग) |क्लोजर-कन्वर्टिंग और (2) निष्क्रियकरण को निरंतरता बनाकर पहला आदेश दिया। उन्होंने परिणामी दुभाषिया मशीन की जाँच करें जैसी गुणवत्ता की ओर इशारा किया, जो सीईके मशीन का मूल है क्योंकि रेनॉल्ड्स का सीपीएस परिवर्तन मूल्य के आधार पर कॉल के लिए था। [13] नाम से कॉल के लिए, ये परिवर्तन स्व-दुभाषिया को मशीन वक्र के प्रारंभिक उदाहरण में मैप करते हैं। [14] एसईसीडी मशीन और कई अन्य अमूर्त मशीनों को इस तरह से अंतर-व्युत्पन्न किया जा सकता है। [15] [16] यह उल्लेखनीय है कि तीन सबसे प्रसिद्ध अमूर्त मशीनें कैलकुलस कार्यात्मक रूप से उसी स्व-दुभाषिया के अनुरूप है।

कुल प्रोग्रामिंग भाषाओं में स्व-व्याख्या

कुल कार्यात्मक प्रोग्रामिंग भाषाएं जो दृढ़ता से सामान्यीकरण कर रही हैं, ट्यूरिंग पूर्ण नहीं हो सकती हैं, अन्यथा कोई यह देखकर रुकने की समस्या को हल कर सकता है कि प्रोग्राम टाइप-चेक करता है या नहीं। इसका मतलब है कि ऐसे गणना योग्य कार्य हैं जिन्हें संपूर्ण भाषा में परिभाषित नहीं किया जा सकता है।[17] विशेष रूप से संपूर्ण प्रोग्रामिंग भाषा में एक स्व-दुभाषिया को परिभाषित करना असंभव है, उदाहरण के लिए किसी भी टाइप किए गए लैम्ब्डा कैलकुलस में जैसे कि सरल रूप से टाइप किया गया लैम्ब्डा कैलकुलस, जीन-यवेस गिरार्ड का सिस्टम एफ, या थिएरी कोक्वांड के निर्माण का कैलकुलस।[18][19] यहां, सेल्फ-इंटरप्रेटर से हमारा तात्पर्य एक ऐसे प्रोग्राम से है जो स्रोत शब्द प्रतिनिधित्व को कुछ सादे प्रारूप (जैसे वर्णों की एक स्ट्रिंग) में लेता है और संबंधित सामान्यीकृत शब्द का प्रतिनिधित्व लौटाता है। यह असंभवता परिणाम स्व-व्याख्याकार की अन्य परिभाषाओं के लिए लागू नहीं होता है। उदाहरण के लिए, कुछ लेखकों ने प्रकार के कार्यों का उल्लेख किया है स्व-व्याख्याकार के रूप में, कहाँ के अभ्यावेदन का प्रकार है -टाइप किए गए शब्द. भ्रम से बचने के लिए, हम इन कार्यों को स्व-पहचानकर्ता के रूप में संदर्भित करेंगे। ब्राउन और पाल्सबर्ग ने दिखाया कि स्व-पहचानकर्ताओं को सिस्टम एफ और सिस्टम एफ सहित कई दृढ़ता से सामान्यीकृत भाषाओं में परिभाषित किया जा सकता है।ω.[20] यह संभव हो सका क्योंकि एन्कोडेड शब्दों के प्रकार उनके प्रतिनिधित्व के प्रकारों में परिलक्षित होते हैं जो विकर्ण लेम्मा के निर्माण को रोकते हैं। अपने पेपर में, ब्राउन और पाल्सबर्ग ने पारंपरिक ज्ञान को अस्वीकार करने का दावा किया है कि आत्म-व्याख्या असंभव है (और वे विकिपीडिया को पारंपरिक ज्ञान के उदाहरण के रूप में संदर्भित करते हैं), लेकिन वे वास्तव में आत्म-पहचानकर्ताओं की असंभवता को अस्वीकार करते हैं, एक अलग अवधारणा . अपने अनुवर्ती कार्य में, वे यहां प्रयुक्त अधिक विशिष्ट स्व-पहचानकर्ता शब्दावली पर स्विच करते हैं, विशेष रूप से इन्हें स्व-मूल्यांकनकर्ताओं से अलग करते हैं। .[21] वे यह भी मानते हैं कि आत्म-मूल्यांकन को लागू करना आत्म-मान्यता की तुलना में कठिन लगता है, और पूर्व के कार्यान्वयन को दृढ़ता से सामान्यीकृत भाषा में एक खुली समस्या के रूप में छोड़ देते हैं।

उपयोग

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

उदाहरण

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

समूहबद्ध कालानुक्रमिक क्रम में नीचे से ऊपर तक डिज़ाइन किए गए मेटा-सर्कुलर कार्यान्वयन वाली कुछ भाषाएँ:

तृतीय पक्षों के माध्यम से मेटा-सर्कुलर कार्यान्वयन वाली कुछ भाषाएँ:

यह भी देखें

संदर्भ

  1. 1.0 1.1 1.2 1.3 1.4 Reynolds, John C. (1972). "Definitional Interpreters for Higher-Order Programming Languages". Proceedings of the ACM annual conference on - ACM '72 (PDF). Vol. 2. Proceedings of 25th ACM National Conference. pp. 717–740. doi:10.1145/800194.805852. Retrieved 14 April 2017.
  2. 2.0 2.1 Reynolds, John C. (1998). "Definitional Interpreters Revisited" (PDF). Higher-Order and Symbolic Computation. 11 (4): 355–361. doi:10.1023/A:1010075320153. S2CID 34126862. Retrieved 21 March 2023.
  3. 3.0 3.1 "The Metacircular Evaluator". कंप्यूटर प्रोग्राम की संरचना और व्याख्या. MIT.
  4. Böhm, Corrado (1954). "Calculatrices digitales. Du déchiffrage des formules logico-mathématiques par la machine même dans la conception du programme". Ann. Mat. Pura Appl. 4 (37): 1–51.
  5. Knuth, Donald E.; Pardo, Luis Trabb (August 1976). प्रोग्रामिंग भाषाओं का प्रारंभिक विकास. p. 36.
  6. McCarthy, John (1961). "A Universal LISP Function" (PDF). Lisp 1.5 Programmer's Manual. p. 10.
  7. Harvey, Brian. "कंप्यूटर प्रोग्राम की संरचना और व्याख्या क्यों मायने रखती है?". people.eecs.berkeley.edu. Retrieved 14 April 2017.
  8. Braithwaite, Reginald (2006-11-22). "मेटा-सर्कुलर दुभाषिया का महत्व". Retrieved 2011-01-22.
  9. Danvy, Olivier (2006). डेटा ऑब्जेक्ट के रूप में प्रोग्राम के लिए एक विश्लेषणात्मक दृष्टिकोण (Thesis). doi:10.7146/aul.214.152. ISBN 9788775073948.
  10. Strachey, Christopher (1967). Fundamental Concepts in Programming Languages (Technical report). doi:10.1023/A:1010000313106.
  11. Mosses, Peter D. (2000). "A Foreword to 'Fundamental Concepts in Programming Languages'". Higher-Order and Symbolic Computation. 13 (1/2): 7–9. doi:10.1023/A:1010048229036.
  12. Plotkin, Gordon D. (1975). "Call by name, call by value and the lambda-calculus". Theoretical Computer Science. 1 (2): 125–159. doi:10.1016/0304-3975(75)90017-1.
  13. Felleisen, Matthias; Friedman, Daniel (1986). Control Operators, the SECD Machine, and the lambda-Calculus (PDF). Formal Description of Programming Concepts III, Elsevier Science Publishers B.V. (North-Holland). pp. 193–217.
  14. Schmidt, David A. (1980). "State transition machines for lambda-calculus expressions". State transition machines for lambda calculus expressions. Lecture Notes in Computer Science. Vol. 94. Semantics-Directed Compiler Generation, LNCS 94. pp. 415–440. doi:10.1007/3-540-10250-7_32. ISBN 978-3-540-10250-2.
  15. Danvy, Olivier (2004). A Rational Deconstruction of Landin's SECD Machine (PDF). Implementation and Application of Functional Languages, 16th International Workshop, IFL 2004, Revised Selected Papers, Lecture Notes in Computer Science 3474, Springer. pp. 52–71. ISSN 0909-0878.
  16. Ager, Mads Sig; Biernacki, Dariusz; Danvy, Olivier; Midtgaard, Jan (2003). "A Functional Correspondence between Evaluators and Abstract Machines". Brics Report Series. 5th International ACM SIGPLAN Conference on Principles and Practice of Declarative Programming (PPDP'03). 10 (13): 8–19. doi:10.7146/brics.v10i13.21783.
  17. Riolo, Rick; Worzel, William P.; Kotanchek, Mark (4 June 2015). जेनेटिक प्रोग्रामिंग सिद्धांत और अभ्यास XII. Springer. p. 59. ISBN 978-3-319-16030-6. Retrieved 8 September 2021.
  18. Conor McBride (May 2003), "on termination" (posted to the Haskell-Cafe mailing list).
  19. Andrej Bauer (June 2014), Answer to: A total language that only a Turing complete language can interpret (posted to the Theoretical Computer Science StackExchange site)
  20. Brown, Matt; Palsberg, Jens (11 January 2016). "Breaking through the normalization barrier: a self-interpreter for f-omega" (PDF). Proceedings of the 43rd Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages: 5–17. doi:10.1145/2837614.2837623. ISBN 9781450335492. S2CID 14781370.
  21. Brown, Matt; Palsberg, Jens (January 2017). "गहन प्रकार के कार्यों के माध्यम से टाइप किया गया स्व-मूल्यांकन". Proceedings of the 44th ACM SIGPLAN Symposium on Principles of Programming Languages: 415–428. doi:10.1145/3009837.3009853. ISBN 9781450346603.
  22. Oriol, Manuel; Meyer, Bertrand (2009-06-29). Objects, Components, Models and Patterns: 47th International Conference, TOOLS EUROPE 2009, Zurich, Switzerland, June 29-July 3, 2009, Proceedings. Springer Science & Business Media. p. 330. ISBN 9783642025716. Retrieved 14 April 2017.
  23. Meta-circular implementation of the Pico programming language


बाहरी संबंध