संकलक

From Vigyanwiki
Revision as of 17:09, 2 January 2023 by alpha>Alokchanchal

यह लेख कंप्यूटर भाषाओं का अनुवाद करने वाले सॉफ्टवेयर के बारे में है। मंगा के लिए, संकलक (मंगा) देखें।

"कंपाइल" और "संकलन" यहां पुनर्निर्देशित करें। सॉफ्टवेयर कंपनी के लिए, कंपाइल (कंपनी) देखें। अन्य उपयोगों के लिए, संकलन देखें।

कंप्यूटिंग, संकलक (कंपाइलर) एक कंप्यूटर प्रोग्राम है जो प्रोग्रामिंग भाषा (स्रोत भाषा) में लिखे गए कंप्यूटर कोड को अन्य भाषा टारगेट-भाषा में अनुवादित करता है। ''संकलक'' नाम मुख्य रूप से उन प्रोग्रामों के लिए उपयोग किया जाता है जो एक कार्यान्वयन प्रोग्राम बनाने के लिए एक उच्च-स्तरीय प्रोग्रामिंग भाषा से एक निम्न-स्तरीय प्रोग्रामिंग भाषा (जैसे असेंबली भाषा, वस्तु कोड, या मशीन कोड) में स्रोत कोड का अनुवाद करता है।[1][2]: p1 Cite error: Invalid <ref> tag; invalid names, e.g. too many

कई अलग-अलग प्रकार के संकलक हैं जो विभिन्न उपयोगी रूपों में आउटपुट उत्पन्न करते हैं। क्रॉस-कंपाइलर (व्‍यति अनुभाषक) एक अलग सेंट्रल प्रोसेसिंग यूनिट (सीपीयू) या ऑपरेटिंग सिस्टम के लिए कोड तैयार करता है, जिस पर क्रॉस-कंपाइलर स्वयं सक्रिय है। एक बूटस्ट्रैप संकलक प्रायः एक अस्थायी संकलक होता है, जिसका उपयोग किसी भाषा के लिए अधिक स्थायी या अपेक्षाकृत अधिक अनुकूलित संकलक के संकलन के लिए किया जाता है।

एक प्रोग्राम जो निम्न-स्तरीय भाषा से उच्च स्तर की भाषा में अनुवाद करता है, वह एक डिकंपाइलर है जो संबंधित सॉफ़्टवेयर में सम्मिलित हैं, एक प्रोग्राम जो उच्च-स्तरीय भाषाओं के बीच अनुवाद करता है, जिसे सामान्यतः सोर्स-टू-सोर्स कंपाइलर (एस2एस) या ट्रांसपिलर कहा जाता है। एक भाषा पुनर्लेखन सामान्यतः एक ऐसा प्रोग्राम है जो भाषा में परिवर्तन के बिना अभिव्यक्ति (कंप्यूटर विज्ञान) के रूप का अनुवाद करता है। एक संकलक-संकलक एक संकलक है जो एक संकलक (या एक का भाग) बनाता है, प्रायः एक सामान्य और पुन: प्रयोज्य तरीके से ताकि कई अलग-अलग कंपाइलरों का उत्पादन करने में सक्षम हो सके।

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

स्रोत प्रोग्राम को बदलने के लिए उपयोग किए जाने वाले संकलक एकमात्र भाषा प्रोसेसर नहीं हैं। एक अनुवादक (कंप्यूटिंग) कंप्यूटर सॉफ्टवेयर है जो संकेतित कार्यों को रूपांतरित करता है और पुनः निष्पादित करता है।[2]: p2  अनुवाद प्रक्रिया कंप्यूटर भाषाओं के डिजाइन को प्रभावित करती है, जिससे संकलन या व्याख्या की प्राथमिकता होती है। सिद्धांत रूप में, एक प्रोग्रामिंग भाषा में एक संकलक और अनुवादक दोनों हो सकते हैं। गतिविधि में, प्रोग्रामिंग भाषाएँ केवल एक (एक संकलक या एक अनुवादक) से जुड़ी होती हैं।

इतिहास

एक विशिष्ट बहु-भाषा, बहु-टारगेट संकलक के संचालन का आरेख

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

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

  • वर्णमाला, प्रतीकों का कोई परिमित समूह;
  • स्ट्रिंग, प्रतीकों का एक परिमित अनुक्रम;
  • भाषा, वर्णमाला पर स्ट्रिंग का कोई समूह।

किसी भाषा में वाक्यों को नियमों के एक समूह द्वारा परिभाषित किया जा सकता है जिसे व्याकरण कहा जाता है।[4]

बैकस-नौर फॉर्म (बीएनएफ) एक भाषा के वाक्यों के सिंटैक्स का वर्णन करता है और जॉन बैकस द्वारा एल्गोल 60 के सिंटैक्स के लिए उपयोग किया गया था।[5] ये विचार एक भाषाविद् नोम चौमस्की द्वारा संदर्भ-मुक्त व्याकरण अवधारणाओं से प्राप्त हुए हैं।[6] बीएनएफ और इसके प्रसारण प्रोग्रामिंग संकेतन के सिंटैक्स का वर्णन करने के लिए मानक उपकरण बन गए हैं, और कई स्थितियों में बीएनएफ विवरण से संकलक के भाग स्वचालित रूप से उत्पन्न होते हैं।[7]

1940 के दशक में, कोनराड ज़्यूस ने प्लैंकलकुल (प्लान कैलकुलस) नामक एक एल्गोरिथम प्रोग्रामिंग भाषा तैयार की। जबकि 1970 के दशक तक कोई वास्तविक कार्यान्वयन नहीं हुआ था, इसने बाद में 1950 के दशक के अंत में केन इवरसन द्वारा डिज़ाइन की गई एपीएल (प्रोग्रामिंग भाषा) में देखी गई अवधारणाओं को प्रस्तुत किया।[8] एपीएल गणितीय संगणनाओं के लिए एक भाषा है।

डिजिटल कंप्यूटिंग के प्रारंभिक वर्षों के समय उच्च स्तरीय भाषा डिजाइन ने विभिन्न प्रकार के अनुप्रयोगों के लिए उपयोगी प्रोग्रामिंग उपकरण प्रदान किए:

  • फोरट्रान (फॉर्मूला ट्रांसलेशन) को इंजीनियरिंग और विज्ञान अनुप्रयोगों के लिए पहली उच्च स्तरीय भाषा माना जाता है।[9]
  • कोबोल (सामान्य व्यवसाय उन्मुखी भाषा) ए-0 और फ्लो-मैटिक से विकसित होकर व्यावसायिक अनुप्रयोगों के लिए प्रमुख उच्च-स्तरीय भाषा बन गई।[10]
  • एलआईएसपी (प्रोग्रामिंग भाषा) (सूची प्रोसेसर) प्रतीकात्मक संगणना के लिए।[11]

डिजिटल कंप्यूटर के लिए निम्न-स्तरीय टारगेट प्रोग्राम में उच्च-स्तरीय स्रोत प्रोग्राम के पूरी तरह से परिभाषित परिवर्तन की आवश्यकता से संकलक तकनीक विकसित हुई। स्रोत कोड के विश्लेषण से संबद्ध करने के लिए संकलक को फ्रंट एंड के रूप में और टारगेट कोड में विश्लेषण को संश्लेषित करने के लिए बैक एंड के रूप मे देखा जा सकता है। फ्रंट एंड और बैक एंड के बीच अनुकूलन अधिक प्रभावशाली टारगेट कोड उत्पन्न कर सकता है।[12]

संकलक प्रौद्योगिकी के विकास में कुछ प्रारंभिक मील के पत्थर:

  • 1952: मैनचेस्टर विश्वविद्यालय में मैनचेस्टर मार्क I कंप्यूटर के लिए एलिक ग्लेनी द्वारा विकसित एक ऑटोकोड संकलक को कुछ लोगों द्वारा पहली संकलित प्रोग्रामिंग भाषा माना जाता है।
  • 1952: रेमिंगटन रैंड में ग्रेस हूपर की टीम ने A-0 प्रोग्रामिंग भाषा के लिए संकलक लिखा (और इसका वर्णन करने के लिए संकलक शब्द विकसित किया),[13][14] हालांकि A-0 संकलक एक पूर्ण संकलक की आधुनिक धारणा की तुलना में एक लोडर या लिंकर के रूप में अधिक कार्य करता है।
  • 1954-1957: आईबीएम में जॉन बैकस के नेतृत्व में एक टीम ने फोरट्रान विकसित किया जिसे सामान्यतः पहली उच्च-स्तरीय भाषा माना जाता है। 1957 में, उन्होंने एक फोरट्रान संकलक पूरा किया जिसे सामान्यतः पहले स्पष्ट रूप से पूर्ण संकलक के रूप में प्रस्तुत करने का श्रेय दिया जाता है।
  • 1959: डेटाप्रणाली भाषा (कोडासिल) पर सम्मेलन ने के विकास की प्रारंभ की। कोबोल डिज़ाइन A-0 और फ्लो-मैटिक पर प्राप्त हुआ। 1960 के दशक के प्रारंभ तक कोबोल को कई संरचना पर संकलित किया गया था।
  • 1958-1960: एल्गोल 58, एल्गोल 60 का अग्रगामी था। एल्गोल 58 ने ब्लॉक (प्रोग्रामिंग) को प्रारंभ किया, जो संरचित प्रोग्रामिंग के उदय में एक महत्वपूर्ण प्रगति थी। एल्गोल 60 नेस्टेड फ़ंक्शन परिभाषाओं को लेक्सिकल स्कोप के साथ क्रियान्वित करने वाली पहली भाषा थी। इसमें पुनरावर्तन सम्मिलित था। इसका सिंटैक्स बैकस-नौर फॉर्म का उपयोग करके परिभाषित किया गया था। एल्गोल 60 ने इसके बाद आने वाली कई भाषाओं को प्रेरित किया। टोनी होरे ने टिप्पणी की: ... यह न केवल अपने पूर्ववर्तियों पर बल्कि इसके लगभग सभी पूर्ववर्ती में भी सुधार था।[15][16]
  • 1958-1962: एमआईटी में जॉन मैक्कार्थी (कंप्यूटर वैज्ञानिक) ने एलआईएसपी (प्रोग्रामिंग भाषा) डिजाइन किया।[17] प्रतीक प्रसंस्करण क्षमताओं ने कृत्रिम बुद्धिमत्ता अनुसंधान के लिए उपयोगी सुविधाएँ प्रदान कीं। 1962 में, एलआईएसपी 1.5 प्रकाशन ने कुछ उपकरणों का उल्लेख किया: स्टीफन रसेल और डैनियल जे. एडवर्ड्स द्वारा लिखित एक अनुवादक, टिम हार्ट और माइक लेविन द्वारा लिखित एक संकलक और असेंबलर।[18]

प्रारम्भिक ऑपरेटिंग सिस्टम और सॉफ्टवेयर असेंबली भाषा में लिखे गए थे। 1960 और 1970 के दशक के प्रारंभ में,प्रणाली प्रोग्रामिंग के लिए उच्च-स्तरीय भाषाओं का उपयोग संसाधन सीमाओं के कारण अभी भी विवादास्पद था। हालांकि, कई शोध और उद्योग प्रयासों ने उच्च-स्तरीयप्रणाली प्रोग्रामिंग भाषाओ की ओर परिवर्तन प्रारंभ किया, उदाहरण के लिए, बीसीपीएल, ब्लिस, बी (प्रोग्रामिंग भाषा), और सी (प्रोग्रामिंग भाषा)।

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

ब्लिस (सिस्टम सॉफ्टवेयर के कार्यान्वयन के लिए मूल भाषा) को डिजिटल उपकरण संस्था (डीईसी) पीडीपी-10 कंप्यूटर के लिए डब्ल्यूए वुल्फ कार्नेगी मेलन विश्वविद्यालय (सीएमयू) शोध समूह द्वारा विकसित किया गया था। सीएमयू समूह ने एक साल बाद 1970 में ब्लिस-11 संकलक विकसित किया।

मॉलटिक्स (मल्टीप्लेक्स सूचना और कंप्यूटिंग सेवा), एक टाइम-शेयरिंग ऑपरेटिंग सिस्टम परियोजना, जिसमें एमआईटी, बेल लैब्स, जनरल इलेक्ट्रिक (बाद में हनीवेल) सम्मिलित थे और इसका नेतृत्व एमआईटी के फर्नांडो कॉर्बेटो ने किया था।।[22] मल्टिक्स आईबीएम और आईबीएम उपयोगकर्ता समूह द्वारा विकसित पीएल/आई भाषा में लिखा गया था।[23] बीएम का लक्ष्य व्यवसाय, वैज्ञानिक औरप्रणाली प्रोग्रामिंग आवश्यकताओं को पूरा करना था ऐसी अन्य भाषाएँ थीं जिन पर विचार किया जा सकता था लेकिन पीएल/आई ने सबसे पूर्ण समाधान की प्रस्तुत की, तथापि इसे क्रियान्वित नहीं किया गया था।[24] मल्टिक्स परियोजना के पहले कुछ वर्षों के लिए, बेल लैब्स से डॉग मैक्लोरी और बॉब मॉरिस द्वारा अर्ली पीएल/आई (ईपीएल) संकलक के साथ भाषा के एक उपसमुच्चय को असेंबली भाषा में संकलित किया जा सकता है।[25] ईपीएल ने परियोजना का तब तक समर्थन किया जब तक कि पूर्ण पीएल/आई के लिए बूट-स्ट्रैपिंग संकलक विकसित नहीं किया जा सका।[26]

बेल लैब्स ने 1969 में मल्टिक्स परियोजना को छोड़ दिया, और डेनिस रिची और केन थॉम्पसन द्वारा लिखित बीसीपीएल अवधारणाओं पर आधारित एकप्रणाली प्रोग्रामिंग भाषा बी (प्रोग्रामिंग भाषा) विकसित की। रिची ने बी के लिए बूट-स्ट्रैपिंग संकलक बनाया और बी में पीडीपी-7 के लिए यूनिक्स (यूनिप्लेक्स सूचना और कंप्यूटिंग सेवा) ऑपरेटिंगप्रणाली लिखा। अंततः यूनिक्स वर्तनी यूनिक्स बन गया।

बेल लैब्स ने बी और बीसीपीएल के आधार पर सी (प्रोग्रामिंग भाषा) का विकास और विस्तार प्रारंभ किया। बीसीपीएल संकलक को बेल लैब्स द्वारा मल्टिक्स में ले जाया गया था और बेल लैब्स में बीसीपीएल एक मुख्य भाषा थी।[27] प्रारंभ में, बेल लैब्स के बी संकलक के लिए एक फ्रंट-एंड प्रोग्राम का उपयोग किया गया था, जब सी संकलक विकसित किया गया था। 1971 में, एक नए पीडीपी-11 ने बी को विस्तार परिभाषित करने और संकलक को पुनः लिखने के लिए संसाधन प्रदान किया। 1973 तक सी भाषा का डिजाइन अनिवार्य रूप से पूरा हो गया था और पीडीपी-11 के लिए यूनिक्स कर्नेल को सी में पुनः लिखा गया था। स्टीव जॉनसन ने पोर्टेबल सी संकलक (पीसीसी) का विकास प्रारंभ किया ताकि नई मशीनों के लिए सी संकलक के पुनः प्राप्ति का समर्थन किया जा सके।[28][29]

वस्तु उन्मुख प्रोग्रामिंग (ओओपी) ने अनुप्रयोग विकास और संरक्षण के लिए कुछ दिलचस्प संभावनाएं प्रस्तुत कीं। वस्तु उन्मुख प्रोग्रामिंग अवधारणाएँ और पीछे जाती हैं लेकिन एलआईएसपी और सिमुला भाषा विज्ञान का भाग थीं।[30] बेल लैब्स में, सी++ का विकास ओओपी में रुचि लेने लगा।[31] सी++ का पहली बार उपयोग 1980 मेंप्रणाली प्रोग्रामिंग के लिए किया गया था। प्रारंभिक डिजाइन ने सिमुला अवधारणाओं के साथ सी भाषा प्रणाली प्रोग्रामिंग क्षमताओं का लाभ उठाया। वस्तु-ओरिएंटेड सुविधाओं को 1983 में जोड़ा गया था।[32] सीफ्रंट प्रोग्राम ने सी84 भाषा संकलक के लिए सी++ फ्रंट-एंड क्रियान्वित किया और बाद के वर्षों में सी++ की लोकप्रियता बढ़ने के साथ कई सी++ संकलक विकसित किए गए।

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

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

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

एडीए स्टोनमैन दस्तावेज़[citation needed] कर्नेल (केएपीएसई) और न्यूनतम (एमएपीएसई) के साथ प्रोग्राम समर्थन पर्यावरण (एपीएसई) को औपचारिक रूप दिया। एक एडीए अनुवादक एनवाईयू/ईडी ने अमेरिकी राष्ट्रीय मानक संस्थान (एएनएसआई) और अंतर्राष्ट्रीय मानक संगठन (आईएसओ) के साथ विकास और मानकीकरण प्रयासों का समर्थन किया। अमेरिकी सैन्य सेवाओं द्वारा आरंभिक एडीए संकलक विकास में स्टोनमैन दस्तावेज़ की तर्ज पर एक पूर्ण एकीकृत डिजाइन वातावरण में संकलक सम्मिलित थे। सेना और नौसेना ने एडीए भाषा प्रणाली (एएलएस) परियोजना पर कार्य किया, जो डीईसी/वैक्स संरचना को योजनाबद्ध था, जबकि वायु सेना ने एडीए एकीकृत वातावरण (एआईई) पर आईबीएम 370 श्रृंखला को योजनाबद्ध किया। जबकि परियोजनाओं ने वांछित परिणाम प्रदान नहीं किए, उन्होंने एडीए विकास पर समग्र प्रयास में योगदान दिया।[36]

अन्य एडीए संकलक प्रयास ब्रिटेन में यॉर्क विश्वविद्यालय में और जर्मनी में कार्लज़ूए विश्वविद्यालय में प्राप्त थे। अमेरिका में, वर्डिक्स (बाद में तर्कसंगत द्वारा अधिग्रहित) ने वर्डिक्स एडीए विकास प्रणाली (वीएडीएस) को सेना को दिया। वीएडीएस ने एक संकलक सहित विकास उपकरण का एक समूह प्रदान किया। यूनिक्स/वीएडीएस को विभिन्न प्रकार के यूनिक्स प्लेटफार्मों पर आयोजित किया जा सकता है जैसे डीईसी अल्ट्रिक्स और सन 3/60 सोलारिस को सेना सीईसीओएम मूल्यांकन में मोटोरोला 68020 पर योजनाबद्ध किया गया है।[37] शीघ्र ही कई एडीए संकलक उपलब्ध थे जो एडीए सत्यापन परीक्षण पास कर चुके थे। मुफ़्त सॉफ्टवेयर संस्थान जीएनयू परियोजना ने जीएनयू संकलक संग्रह (जीसीसी) विकसित किया है जो कई भाषाओं और लक्ष्यों का समर्थन करने के लिए एक प्रमुख क्षमता प्रदान करता है। एडीए संस्करण जीएनएटी सबसे व्यापक रूप से उपयोग किए जाने वाले एडीए संकलकों में से एक है। जीएनएटी मुफ़्त है लेकिन व्यावसायिक समर्थन भी है, उदाहरण के लिए, एडीएकोर की स्थापना 1994 में एडीए के लिए व्यावसायिक सॉफ़्टवेयर समाधान प्रदान करने के लिए की गई थी। जीएनएटी प्रो में जीएनयू जीसीसी आधारित जीएनएटी सम्मिलित है जिसमें एक एकीकृत विकास वातावरण प्रदान करने के लिए एक उपकरण समूह है।

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

जब 50 के दशक के उत्तरार्ध में संकलन का क्षेत्र प्रारंभ हुआ, तो इसका ध्यान उच्च-स्तरीय भाषा प्रोग्रामों के मशीन कोड में अनुवाद तक सीमित था ... संकलक क्षेत्र कंप्यूटर संरचना, प्रोग्रामिंग भाषाओं, औपचारिक तरीकों, इंजीनियरिंग, और कंप्यूटर सुरक्षा सॉफ्टवेयर सहित अन्य विषयों के साथ तीव्रता से जुड़ा हुआ है। ।[39] ''संकलक अनुसंधान: द नेक्स्ट 50 इयर्स'' लेख ने वस्तु-उन्मुख भाषा और जावा के महत्व पर ध्यान दिया। भविष्य के अनुसंधान लक्ष्यों में सुरक्षा और समानांतर कंप्यूटिंग का उल्लेख किया गया।

संकलक निर्माण

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

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

एक व्यक्ति द्वारा लिखी गई अपेक्षाकृत सरल भाषा के लिए एक संकलक सॉफ्टवेयर का एक एकल, अखंड भाग हो सकता है। हालाँकि, जैसे-जैसे स्रोत भाषा जटिलता में बढ़ती है, डिज़ाइन को कई अन्योन्याश्रित चरणों में विभाजित किया जा सकता है। अलग-अलग चरण डिजाइन सुधार प्रदान करते हैं जो संकलन प्रक्रिया में कार्यों के विकास पर ध्यान केंद्रित करते हैं।

एक-पास बनाम मल्टी-पास संकलक

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

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

कुछ स्थितियों में, एक भाषा सुविधा के डिजाइन के लिए स्रोत पर एक से अधिक पास करने के लिए एक संकलक की आवश्यकता हो सकती है। उदाहरण के लिए, स्रोत की 20 पंक्ति पर प्रकट होने वाली एक घोषणा पर विचार करें जो पंक्ति 10 पर प्रदर्शित होने वाले कथन के अनुवाद को प्रभावित करती है। इस स्थिति में, पहले पास को उन घोषणाओं के बारे में जानकारी एकत्र करने की आवश्यकता होती है जो बाद के पास के समय होने वाले वास्तविक अनुवाद के साथ प्रभावित होती हैं।

एकल पास में संकलन का दोष यह है कि उच्च गुणवत्ता वाले कोड उत्पन्न करने के लिए आवश्यक कई परिष्कृत संकलक अनुकूलन करना संभव नहीं है। यह गणना करना पूर्ण रूप से कठिन हो सकता है कि एक अधिकतम संकलक कितने पास करता है। उदाहरण के लिए, अनुकूलन के विभिन्न चरण एक अभिव्यक्ति का कई बार विश्लेषण कर सकते हैं लेकिन केवल एक बार अन्य अभिव्यक्ति का विश्लेषण कर सकते हैं।

एक संकलक को छोटे प्रोग्रामों में विभाजित करना एक ऐसी तकनीक है जिसका उपयोग शोधकर्ताओं द्वारा उपयुक्त रूप से सही संकलक बनाने में रुचि रखने वाले द्वारा किया जाता है। छोटे प्रोग्रामों के एक समूह की शुद्धता को प्रमाणित करने के लिए प्रायः एक बड़े, एकल, समकक्ष प्रोग्राम की शुद्धता को प्रमाणित करने से कम प्रयास की आवश्यकता होती है।

तीन चरण संकलक संरचना

Error creating thumbnail:
संकलक डिजाइन

संकलक डिजाइन में चरणों की शुद्धता से संख्या के होने पर भी, चरणों को तीन चरणों में से एक को नियुक्त किया जा सकता है। चरणों में एक फ्रंट एंड, एक मिडिल एंड और एक बैक एंड सम्मिलित है।

  • फ्रंट एंड इनपुट को स्कैन करता है और एक विशिष्ट स्रोत भाषा के अनुसार सिंटैक्स और सिमेंटिक्स की पुष्टि करता है। टाइप प्रणाली के लिए यह टाइप की जानकारी एकत्र करके टाइप की जाँच करता है। यदि इनपुट प्रोग्राम वाक्यात्मक रूप से गलत है या इसमें टाइप त्रुटि है, तो यह त्रुटि और/या चेतावनी संदेश उत्पन्न करता है, सामान्यतः स्रोत कोड में उस स्थान की पहचान करता है जहां समस्या का पता चला था; कुछ स्थितियों में वास्तविक त्रुटि प्रोग्राम में पहले (बहुत) हो सकती है। फ्रंट एंड के पहलुओं में लेक्सिकल विश्लेषण, सिंटैक्स एनालिसिस और सिमेंटिक एनालिसिस