मध्यवर्ती प्रतिनिधित्व

From alpha
Jump to navigation Jump to search

एक मध्यवर्ती प्रतिनिधित्व (आईआर) स्रोत कोड का प्रतिनिधित्व करने के लिए एक कंपाइलर या वर्चुअल मशीन द्वारा आंतरिक रूप से उपयोग की जाने वाली डेटा संरचना या कोड है। एक आईआर को आगे की प्रक्रिया के लिए अनुकूल बनाया गया है, जैसे कंपाइलर ऑप्टिमाइज़ेशन और प्रोग्राम परिवर्तन।[1] एक अच्छा आईआर सटीक होना चाहिए - सूचना के नुकसान के बिना स्रोत कोड का प्रतिनिधित्व करने में सक्षम[2] - और किसी विशेष स्रोत या लक्ष्य भाषा से स्वतंत्र।[1]एक आईआर कई रूपों में से एक ले सकता है: एक इन-मेमोरी डेटा संरचना, या एक विशेष टपल- या स्टैक (अमूर्त डेटा प्रकार)-आधारित बायटेकोड प्रोग्राम द्वारा पठनीय।[3] बाद के मामले में इसे एक मध्यवर्ती भाषा भी कहा जाता है।

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

मध्यम भाषा

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

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

मध्यवर्ती भाषाओं के लिए एक लोकप्रिय प्रारूप तीन-पता कोड है।

इस शब्द का उपयोग कुछ उच्च-स्तरीय प्रोग्रामिंग भाषाओं द्वारा मध्यवर्ती के रूप में उपयोग की जाने वाली भाषाओं को संदर्भित करने के लिए भी किया जाता है, जो स्वयं वस्तु या मशीन कोड का उत्पादन नहीं करती हैं, लेकिन केवल मध्यवर्ती भाषा का उत्पादन करती हैं। यह मध्यवर्ती भाषा ऐसी भाषा के लिए एक कंपाइलर को सबमिट की जाती है, जो तब तैयार वस्तु या मशीन कोड को आउटपुट करती है। यह आमतौर पर अनुकूलन (कंप्यूटर विज्ञान) की प्रक्रिया को आसान बनाने या एक मध्यवर्ती भाषा का उपयोग करके पोर्टिंग को बढ़ाने के लिए किया जाता है जिसमें कई सेंट्रल प्रोसेसिंग यूनिट और ऑपरेटिंग सिस्टम, जैसे सी (प्रोग्रामिंग भाषा) के लिए कंपाइलर होते हैं। इसके लिए उपयोग की जाने वाली भाषाएँ उच्च-स्तरीय भाषाओं और निम्न-स्तरीय प्रोग्रामिंग भाषाओं के बीच जटिलता में आती हैं | निम्न-स्तरीय भाषाएँ, जैसे असेंबली भाषाएँ।

भाषाएं

हालांकि स्पष्ट रूप से एक मध्यवर्ती भाषा के रूप में डिज़ाइन नहीं किया गया है, सी (प्रोग्रामिंग भाषा) की प्रकृति असेंबली भाषा के एक सार के रूप में है और इसकी सर्वव्यापकता के रूप में यूनिक्स जैसी और अन्य ऑपरेटिंग सिस्टम में वास्तविक सिस्टम प्रोग्रामिंग भाषा ने इसे एक लोकप्रिय मध्यवर्ती भाषा बना दिया है: एफिल (प्रोग्रामिंग लैंग्वेज), सथेर, एस्टरेल, लिस्प (प्रोग्रामिंग लैंग्वेज) की कुछ प्रोग्रामिंग लैंग्वेज बोलियां (लश (प्रोग्रामिंग लैंग्वेज), गैम्बिट (स्कीम इम्प्लीमेंटेशन)), हास्केल (प्रोग्रामिंग लैंग्वेज) (ग्लासगो हास्केल कंपाइलर), स्क्वीक का स्मॉलटॉक-सबसेट स्लैंग, निम (प्रोग्रामिंग भाषा), साइथन, सीड7, सिस्टमटैप, वाला (प्रोग्रामिंग भाषा), वी, और अन्य सी का उपयोग एक मध्यवर्ती भाषा के रूप में करते हैं। C के वेरिएंट को C-- और C इंटरमीडिएट लैंग्वेज सहित पोर्टेबल असेंबली लैंग्वेज के रूप में C की विशेषताएं प्रदान करने के लिए डिज़ाइन किया गया है।

वर्चुअल मशीन या पी-कोड मशीन को लक्षित करने वाली किसी भी भाषा को मध्यवर्ती भाषा माना जा सकता है:

  • जावा बाइटकोड
  • माइक्रोसॉफ्ट की कॉमन इंटरमीडिएट लैंग्वेज एक इंटरमीडिएट लैंग्वेज है जिसे मशीन कोड के स्थिर या गतिशील संकलन से पहले .NET फ्रेमवर्क के लिए सभी कंपाइलरों द्वारा साझा करने के लिए डिज़ाइन किया गया है।
  • जबकि अधिकांश मध्यवर्ती भाषाओं को वैधानिक रूप से टाइप की गई भाषाओं का समर्थन करने के लिए डिज़ाइन किया गया है, पैरट इंटरमीडिएट प्रतिनिधित्व को गतिशील रूप से टाइप की गई भाषाओं-शुरुआत में पर्ल और पायथन का समर्थन करने के लिए डिज़ाइन किया गया है।
  • IBM i#TIMI का उपयोग IBM i प्लेटफॉर्म पर कंपाइलरों द्वारा किया जाता है।
  • बीसीपीएल के लिए ओ-कोड
  • MATLAB पूर्व संकलित कोड
  • माइक्रोसॉफ्ट पी-कोड
  • पास्कल (प्रोग्रामिंग भाषा) पी-कोड

जीएनयू कंपाइलर संग्रह (जीसीसी) पोर्टेबिलिटी और क्रॉस-संकलन को आसान बनाने के लिए आंतरिक रूप से कई मध्यवर्ती भाषाओं का उपयोग करता है। इनमें भाषाएं हैं

  • ऐतिहासिक रजिस्टर ट्रांसफर लैंग्वेज (RTL)
  • ट्री लैंग्वेज GNU कंपाइलर कलेक्शन # GENERIC और GIMPLE
  • SSA (कम्प्यूटिंग) आधारित GIMPLE। (सामान्य से निम्न-स्तर; अधिकांश ऑप्टिमाइज़र के लिए इनपुट; कॉम्पैक्ट बायटेकोड नोटेशन है।)

अंतिम लक्ष्य के रूप में GCC इन IR को उत्पन्न करने का समर्थन करता है:

  • एचएसए इंटरमीडिएट परत
  • एलएलवीएम # इंटरमीडिएट प्रतिनिधित्व (जीआईएमपीएलई से अब-मृत एलएलवीएम-जीसीसी में परिवर्तित जो एलएलवीएम ऑप्टिमाइज़र और कोडजेन का उपयोग करता है)

एलएलवीएम कंपाइलर फ्रेमवर्क एलएलवीएम # इंटरमीडिएट प्रतिनिधित्व इंटरमीडिएट भाषा पर आधारित है, जिसमें कॉम्पैक्ट, बाइनरी सीरियलाइज्ड प्रतिनिधित्व को बिटकोड के रूप में भी जाना जाता है और इसे ऐप्पल द्वारा उत्पादित किया गया है।[4][5] GIMPLE बायटेकोड की तरह, LLVM बिटकोड लिंक-टाइम ऑप्टिमाइज़ेशन में उपयोगी है। जीसीसी की तरह, एलएलवीएम भी सीधे वितरण के लिए कुछ आईआर को लक्षित करता है, जिसमें Google के मूल ग्राहक आईआर और मानक पोर्टेबल इंटरमीडिएट प्रतिनिधित्व शामिल हैं। एलएलवीएम के भीतर एक और विकास मल्टी-लेवल इंटरमीडिएट रिप्रेजेंटेशन (एमएलआईआर) का उपयोग है, जिसमें विभिन्न विषम लक्ष्यों के लिए कोड उत्पन्न करने और विभिन्न कंपाइलरों के आउटपुट को संयोजित करने की क्षमता है।[6] ILOC मध्यवर्ती भाषा[7] एक साधारण लक्ष्य भाषा के रूप में संकलक डिजाइन पर कक्षाओं में प्रयोग किया जाता है।[8]


अन्य

स्थैतिक कार्यक्रम विश्लेषण उपकरण अक्सर एक मध्यवर्ती प्रतिनिधित्व का उपयोग करते हैं। उदाहरण के लिए, रेडारे 2 बाइनरी फाइलों के विश्लेषण और रिवर्स-इंजीनियरिंग के लिए एक टूलबॉक्स है। यह मध्यवर्ती भाषाओं ESIL का उपयोग करता है[9] और रील[10] बाइनरी फ़ाइलों का विश्लेषण करने के लिए।

यह भी देखें

  • अंतर्भाषी मशीनी अनुवाद
  • धुरी भाषा
  • सार वाक्य रचना का पेड़
  • बाइटकोड (मध्यवर्ती कोड)
  • प्रतीक तालिका
  • सोर्स-टू-सोर्स कंपाइलर
  • ग्राफ पुनर्लेखन और शब्द पुनर्लेखन
  • UNCOL

संदर्भ

  1. 1.0 1.1 Walker, David. "CS320: संकलक: मध्यवर्ती प्रतिनिधित्व" (Lecture slides). Retrieved 12 February 2016.
  2. Chow, Fred (22 November 2013). "क्रॉस-लैंग्वेज इंटरऑपरेबिलिटी की चुनौती". ACM Queue. 11 (10). Retrieved 12 February 2016.
  3. Toal, Ray. "मध्यवर्ती प्रतिनिधित्व". Retrieved 12 February 2016.
  4. "बिटकोड (आईओएस, वॉचओएस)". Hacker News. 10 June 2015. Retrieved 17 June 2015.
  5. "एलएलवीएम बिटकोड फ़ाइल स्वरूप". llvm.org. Retrieved 17 June 2015.
  6. "एमएलआईआर".
  7. "An ILOC Simulator" Archived 2009-05-07 at the Wayback Machine by W. A. Barrett 2007, paraphrasing Keith Cooper and Linda Torczon, "Engineering a Compiler", Morgan Kaufmann, 2004. ISBN 1-55860-698-X.
  8. "CISC 471 Compiler Design" by Uli Kremer
  9. The radare2 contributors. "सांस". radare2 project. Archived from the original on 18 August 2015. Retrieved 17 June 2015. {{cite web}}: |author= has generic name (help)
  10. Sebastian Porst (7 March 2010). "रील भाषा - भाग I". zynamics.com. Retrieved 17 June 2015.


इस पेज में लापता आंतरिक लिंक की सूची

बाहरी कड़ियाँ

श्रेणी:संकलक निर्माण श्रेणी: प्रोग्रामिंग भाषा Categoryीकरण