संकलक

From Vigyanwiki
Revision as of 15:17, 31 December 2022 by alpha>Radhamishra

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

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

कम्प्यूटिंग में, एक कंपाइलर एक कंप्यूटर प्रोग्राम है जो अनुवादक (कंप्यूटिंग) कंप्यूटर कोड को एक प्रोग्रामिंग भाषा (स्रोत भाषा) में दूसरी भाषा ('लक्ष्य भाषा) में लिखा जाता है। नाम संकलक मुख्य रूप से उन प्रोग्रामों के लिए उपयोग किया जाता है जो एक निष्पादन योग्य प्रोग्राम बनाने के लिए उच्च-स्तरीय प्रोग्रामिंग भाषा से निचले स्तर की भाषा | निम्न-स्तरीय भाषा (जैसे असेंबली भाषा, वस्तु कोड या मशीन कोड) में स्रोत कोड का अनुवाद करते हैं।[1][2]: p1 <रेफरी नाम = सुदर्शनम मलिक फुजिता 2002 पीपी। 506–515 >SUDARSANAM, ASHOK; MALIK, SHARAD; FUJITA, MASAHIRO (2002). "A Retargetable Compilation Methodology for Embedded Digital Signal Processors Using a Machine-Dependent Code Optimization Library". हार्डवेयर/सॉफ्टवेयर सह-डिजाइन में रीडिंग. Elsevier. pp. 506–515. doi:10.1016/b978-155860702-6/50045-4. ISBN 9781558607026. एक कंपाइलर एक कंप्यूटर प्रोग्राम है जो एक उच्च-स्तरीय भाषा (HLL) में लिखे गए प्रोग्राम का अनुवाद करता है, जैसे C, एक समतुल्य असेंबली लैंग्वेज प्रोग्राम [2] में।</रेफरी>

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

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

एक कंपाइलर निम्न में से कुछ या सभी ऑपरेशन करने की संभावना रखता है, जिन्हें प्रायः चरण कहा जाता है: पूर्वप्रक्रमक, शाब्दिक विश्लेषण, पदच्छेद, सिमेंटिक एनालिसिस (कंपाइलर्स) (सिंटैक्स-निर्देशित अनुवाद), इनपुट प्रोग्राम्स को मध्यवर्ती प्रतिनिधित्व, कोड अनुकूलन और कोड में बदलना। पीढ़ी (संकलक)। संकलक सामान्यतः इन चरणों को मॉड्यूलर घटकों के रूप में लागू करते हैं, कुशल डिजाइन को बढ़ावा देते हैं और लक्ष्य आउटपुट के लिए स्रोत इनपुट के कार्यक्रम परिवर्तनों की शुद्धता को बढ़ावा देते हैं। गलत संकलक व्यवहार के कारण होने वाले प्रोग्राम दोषों को ट्रैक करना और उनके आसपास काम करना अधिक कठिन हो सकता है; इसलिए, संकलक शुद्धता सुनिश्चित करने के लिए संकलक कार्यान्वयनकर्ता महत्वपूर्ण प्रयास करते हैं। रेफ नाम = सूर्य2016>Sun, Chengnian; Le, Vu; Zhang, Qirun; Su, Zhendong (2016). "GCC और LLVM में कंपाइलर बग्स को समझने की ओर". ACM. Issta 2016: 294–305. doi:10.1145/2931037.2931074. ISBN 9781450343909. S2CID 8339241.</रेफरी>

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

इतिहास

File:Compiler.svg
एक विशिष्ट बहु-भाषा, बहु-लक्ष्य संकलक के संचालन का आरेख

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

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

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

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

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

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

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

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

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

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

BLISS (बेसिक लैंग्वेज फॉर इंप्लीमेंटेशन ऑफ सिस्टम सॉफ्टवेयर) को डिजिटल इक्विपमेंट कॉरपोरेशन (DEC) PDP-10 कंप्यूटर के लिए WA Wulf's Carnegie Mellon University (CMU) रिसर्च टीम द्वारा विकसित किया गया था। CMU टीम ने एक साल बाद 1970 में BLISS-11 कंपाइलर विकसित किया।

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

बेल लैब्स ने B और BCPL के आधार पर C (प्रोग्रामिंग लैंग्वेज) का विकास और विस्तार प्रारंभ किया। बीसीपीएल संकलक को बेल लैब्स द्वारा मल्टिक्स में ले जाया गया था और बेल लैब्स में बीसीपीएल एक पसंदीदा भाषा थी।[26] प्रारंभ में, बेल लैब्स के बी कंपाइलर के लिए एक फ्रंट-एंड प्रोग्राम का उपयोग किया गया था, जबकि एक सी कंपाइलर विकसित किया गया था। 1971 में, एक नए PDP-11 ने B को एक्सटेंशन परिभाषित करने और कंपाइलर को फिर से लिखने के लिए संसाधन प्रदान किया। 1973 तक सी भाषा का डिजाइन अनिवार्य रूप से पूरा हो गया था और पीडीपी-11 के लिए यूनिक्स कर्नेल को सी में फिर से लिखा गया था। स्टीव जॉनसन ने पोर्टेबल सी कंपाइलर (पीसीसी) का विकास प्रारंभ किया ताकि नई मशीनों के लिए सी कंपाइलर्स के रिटारगेटिंग का समर्थन किया जा सके।[27][28] वस्तु उन्मुख कार्यकर्म (ओओपी) ने अनुप्रयोग विकास और रखरखाव के लिए कुछ दिलचस्प संभावनाएं पेश कीं। OOP अवधारणाएँ और पीछे जाती हैं लेकिन LISP और प्रारम्भिक भाषा विज्ञान का भाग थीं।[29] बेल लैब्स में, C++ का विकास OOP में रुचि लेने लगा।[30] C++ का पहली बार उपयोग 1980 में सिस्टम प्रोग्रामिंग के लिए किया गया था। प्रारंभिक डिजाइन ने सिमुला अवधारणाओं के साथ सी भाषा प्रणाली प्रोग्रामिंग क्षमताओं का लाभ उठाया। ऑब्जेक्ट-ओरिएंटेड सुविधाओं को 1983 में जोड़ा गया था।[31] Cfront प्रोग्राम ने C84 लैंग्वेज कंपाइलर के लिए C++ फ्रंट-एंड लागू किया। बाद के वर्षों में C++ की लोकप्रियता बढ़ने के साथ कई C++ कंपाइलर विकसित किए गए।

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

DARPA (डिफेंस एडवांस्ड रिसर्च प्रोजेक्ट्स एजेंसी) ने 1970 में Wulf की CMU रिसर्च टीम के साथ एक कंपाइलर प्रोजेक्ट प्रायोजित किया। प्रोडक्शन क्वालिटी कंपाइलर-कंपाइलर PQCC डिज़ाइन स्रोत भाषा और लक्ष्य की औपचारिक परिभाषाओं से प्रोडक्शन क्वालिटी कंपाइलर (PQC) तैयार करेगा।[32] PQCC ने अधिक सफलता के बिना पार्सर जनरेटर (जैसे, Yacc) के रूप में पारंपरिक अर्थ से परे कंपाइलर-कंपाइलर शब्द का विस्तार करने की कोशिश की। PQCC को अधिक उचित रूप से एक कंपाइलर जनरेटर के रूप में संदर्भित किया जा सकता है।

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

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

उच्च-स्तरीय भाषाओं ने संकलक अनुसंधान और विकास को चलाना जारी रखा। फोकस क्षेत्रों में अनुकूलन और स्वचालित कोड जनरेशन सम्मिलित हैं। प्रोग्रामिंग भाषाओं और विकास के वातावरण में रुझान ने कंपाइलर तकनीक को प्रभावित किया। अधिक संकलक भाषा वितरण (PERL, जावा डेवलपमेंट किट) और एक IDE (VADS, ग्रहण, Ada Pro) के एक घटक के रूप में सम्मिलित हो गए। प्रौद्योगिकियों के अंतर्संबंध और अन्योन्याश्रय में वृद्धि हुई। वेब सेवाओं के आगमन ने वेब भाषाओं और स्क्रिप्टिंग भाषाओं के विकास को बढ़ावा दिया। स्क्रिप्ट्स कमांड लाइन इंटरफेस (सीएलआई) के प्रारम्भिक दिनों में वापस आती हैं जहां उपयोगकर्ता सिस्टम द्वारा निष्पादित किए जाने वाले आदेशों को दर्ज कर सकता है। शेल प्रोग्राम लिखने के लिए भाषाओं के साथ उपयोगकर्ता शैल अवधारणाएँ विकसित हुईं। प्रारम्भिक विंडोज डिजाइनों ने एक साधारण बैच प्रोग्रामिंग क्षमता की पेशकश की। इन भाषाओं के पारंपरिक परिवर्तन में एक दुभाषिया का इस्तेमाल किया गया था। जबकि व्यापक रूप से उपयोग नहीं किया जाता है, बैश और बैच कंपाइलर लिखे गए हैं। हाल ही में परिष्कृत व्याख्या की गई भाषाएं डेवलपर टूल किट का भाग बन गईं। आधुनिक स्क्रिप्टिंग भाषाओं में PHP, Python, Ruby और Lua सम्मिलित हैं। (लुआ व्यापक रूप से खेल के विकास में उपयोग किया जाता है।) इन सभी में दुभाषिया और संकलक समर्थन है।[37] जब 50 के दशक के उत्तरार्ध में संकलन का क्षेत्र प्रारंभ हुआ, तो इसका ध्यान उच्च-स्तरीय भाषा कार्यक्रमों के मशीन कोड में अनुवाद तक सीमित था ... संकलक क्षेत्र कंप्यूटर वास्तुकला, प्रोग्रामिंग भाषाओं, औपचारिक तरीकों, सॉफ्टवेयर सहित अन्य विषयों के साथ तेजी से जुड़ा हुआ है। इंजीनियरिंग, और कंप्यूटर सुरक्षा।[38] द कंपाइलर रिसर्च: द नेक्स्ट 50 इयर्स आर्टिकल ने ऑब्जेक्ट-ओरिएंटेड लैंग्वेज और जावा के महत्व पर ध्यान दिया। भविष्य के अनुसंधान लक्ष्यों में सुरक्षा और समानांतर कंप्यूटिंग का हवाला दिया गया।

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

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