संकलक: Difference between revisions

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


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


कंपाइलर निम्नलिखित में से कुछ या सभी कार्यों को करने की संभावना रखता है: प्रीप्रोसेसिंग, लेक्सिकल विश्लेषण, पार्सिंग, सिमेंटिक एनालिसिस (सिंटेक्स-निर्देशित अनुवाद (एसडीटी)), कोड ऑप्टिमाइज़ेशन और कोड जनरेशन इनपुट प्रोग्राम्स को मध्यवर्ती प्रतिनिधित्व में बदलना जिन्हें प्रायः चरण कहा जाता है। संकलक सामान्यतः इन चरणों को मॉड्यूलर घटकों के रूप में क्रियान्वित करते हैं, प्रभावशाली डिजाइन को बढ़ावा देते हैं और टारगेट आउटपुट के लिए स्रोत इनपुट के [[कार्यक्रम परिवर्तन|प्रोग्राम परिवर्तन]] की शुद्धता को बढ़ावा देते हैं। प्रोग्राम मे गलत संकलक गतिविधि के कारण होने वाले दोषों को पता लगाना और उनके आसपास कार्य करना अधिक कठिन हो सकता है; इसलिए, [[संकलक शुद्धता]] सुनिश्चित करने के लिए संकलक कार्यान्वयनकर्ता महत्वपूर्ण प्रयास करते हैं।
कंपाइलर निम्नलिखित में से कुछ या सभी कार्यों को करने की संभावना रखता है: प्रीप्रोसेसिंग, लेक्सिकल विश्लेषण, पार्सिंग, सिमेंटिक एनालिसिस (सिंटेक्स-निर्देशित अनुवाद (एसडीटी)), कोड ऑप्टिमाइज़ेशन और कोड जनरेशन इनपुट प्रोग्राम्स को मध्यवर्ती प्रतिनिधित्व में बदलना जिन्हें प्रायः चरण कहा जाता है। संकलक सामान्यतः इन चरणों को मॉड्यूलर घटकों के रूप में क्रियान्वित करते हैं, प्रभावशाली डिजाइन को बढ़ावा देते हैं और टारगेट आउटपुट के लिए स्रोत इनपुट के [[कार्यक्रम परिवर्तन|प्रोग्राम परिवर्तन]] की शुद्धता को बढ़ावा देते हैं। प्रोग्राम मे गलत संकलक गतिविधि के कारण होने वाले दोषों को पता लगाना और उनके आसपास कार्य करना अधिक कठिन हो सकता है; इसलिए, [[संकलक शुद्धता]] सुनिश्चित करने के लिए संकलक कार्यान्वयनकर्ता महत्वपूर्ण प्रयास करते हैं।<ref name = सूर्य2016>{{cite journal |last1=Sun|first1=Chengnian|last2=Le|first2=Vu|last3=Zhang|first3=Qirun|last4=Su|first4=Zhendong|date=2016|title=GCC और LLVM में कंपाइलर बग्स को समझने की ओर|url=http://dl.acm.org/citation.cfm?doid=2931037.2931074|journal=ACM|series=Issta 2016|pages=294–305|doi=10.1145/2931037.2931074|isbn=9781450343909|s2cid=8339241}}</ref>
<ref name = सूर्य2016>{{cite journal |last1=Sun|first1=Chengnian|last2=Le|first2=Vu|last3=Zhang|first3=Qirun|last4=Su|first4=Zhendong|date=2016|title=GCC और LLVM में कंपाइलर बग्स को समझने की ओर|url=http://dl.acm.org/citation.cfm?doid=2931037.2931074|journal=ACM|series=Issta 2016|pages=294–305|doi=10.1145/2931037.2931074|isbn=9781450343909|s2cid=8339241}}</ref>


स्रोत प्रोग्राम को बदलने के लिए उपयोग किए जाने वाले संकलक एकमात्र भाषा प्रोसेसर नहीं हैं। एक [[दुभाषिया (कंप्यूटिंग)|अनुवादक (कंप्यूटिंग)]] कंप्यूटर सॉफ्टवेयर है जो संकेतित कार्यों को रूपांतरित करता है और पुनः निष्पादित करता है।<ref name=dragon/>{{rp|p2}} अनुवाद प्रक्रिया कंप्यूटर भाषाओं के डिजाइन को प्रभावित करती है, जिससे संकलन या व्याख्या की प्राथमिकता होती है। सिद्धांत रूप में, एक प्रोग्रामिंग भाषा में एक संकलक और अनुवादक दोनों हो सकते हैं। गतिविधि में, प्रोग्रामिंग भाषाएँ केवल एक (एक संकलक या एक अनुवादक) से जुड़ी होती हैं।
स्रोत प्रोग्राम को बदलने के लिए उपयोग किए जाने वाले संकलक एकमात्र भाषा प्रोसेसर नहीं हैं। एक [[दुभाषिया (कंप्यूटिंग)|अनुवादक (कंप्यूटिंग)]] कंप्यूटर सॉफ्टवेयर है जो संकेतिक कार्यों को रूपांतरित करता है और पुनः निष्पादित करता है।<ref name=dragon/>{{rp|p2}} अनुवाद प्रक्रिया कंप्यूटर भाषाओं के डिजाइन को प्रभावित करती है, जिससे संकलन या व्याख्या की प्राथमिकता होती है। सिद्धांत रूप में, एक प्रोग्रामिंग भाषा में एक संकलक और अनुवादक दोनों हो सकते हैं। गतिविधि में, प्रोग्रामिंग भाषाएँ केवल ( संकलक या एक अनुवादक) से जुड़ी होती हैं।


== इतिहास ==
== इतिहास ==
{{Main|संकलक निर्माण का इतिहास}}
{{Main|संकलक निर्माण का इतिहास}}
[[File:Compiler.svg |upright=1.5|thumb |एक विशिष्ट बहु-भाषा, बहु-टारगेट संकलक के संचालन का आरेख]]वैज्ञानिकों, गणितज्ञों और इंजीनियरों द्वारा विकसित सैद्धांतिक कंप्यूटिंग (अभिकलन) अवधारणाओं ने द्वितीय विश्व युद्ध के समय डिजिटल आधुनिक कंप्यूटिंग विकास का आधार बनाया। प्राथमिक बाइनरी भाषाएं विकसित हुईं क्योंकि डिजिटल डिवाइस केवल एक और शून्य और अंतर्निहित मशीन संरचना में परिपथ स्वरूप को स्वीकार करना हैं। 1940 के दशक के अंत में, कंप्यूटर संरचना के अधिक व्यवहार्य अपाकर्षण के प्रस्ताव के लिए असेंबली भाषा बनाई गई थीं। प्रारम्भिक कंप्यूटरों की सीमित मुख्य मेमोरी क्षमता के कारण जब पहला संकलक डिजाइन किया गया था तो अधिकतम तकनीकी चुनौतियों का सामना करना पड़ा था। इसलिए, संकलन प्रक्रिया को कई छोटे प्रोग्रामों में विभाजित करने की आवश्यकता थी। फ्रंट एंड प्रोग्राम टारगेट कोड उत्पन्न करने के लिए बैक एंड प्रोग्राम द्वारा उपयोग किए जाने वाले विश्लेषण उत्पादों का उत्पादन करते हैं। जैसा कि कंप्यूटर प्रौद्योगिकी ने अधिक संसाधन प्रदान किए, संकलक डिजाइन संकलन प्रक्रिया के साथ अपेक्षाकृत अधिक संरेखित हो सकते हैं।
[[File:Compiler.svg |upright=1.5|thumb |एक विशिष्ट बहु-भाषा, बहु-टारगेट संकलक के संचालन का आरेख]]वैज्ञानिकों, गणितज्ञों और इंजीनियरों द्वारा विकसित सैद्धांतिक कंप्यूटिंग (अभिकलन) अवधारणाओं ने द्वितीय विश्व युद्ध के समय डिजिटल आधुनिक कंप्यूटिंग विकास का आधार बनाया। प्राथमिक बाइनरी भाषाएं विकसित हुईं क्योंकि डिजिटल डिवाइस केवल शून्य और अंतर्निहित मशीन संरचना में परिपथ स्वरूप को स्वीकार करना हैं। 1940 के दशक के अंत में, कंप्यूटर संरचना के अधिक व्यवहार्य अपाकर्षण के प्रस्ताव के लिए असेंबली भाषा बनाई गई थीं। प्रारम्भिक कंप्यूटरों की सीमित मुख्य मेमोरी क्षमता के कारण जब पहला संकलक डिजाइन किया गया था तो अधिकतम तकनीकी चुनौतियों का सामना करना पड़ा था। इसलिए, संकलन प्रक्रिया को कई छोटे प्रोग्रामों में विभाजित करने की आवश्यकता थी। फ्रंट एंड प्रोग्राम टारगेट कोड उत्पन्न करने के लिए बैक एंड प्रोग्राम द्वारा उपयोग किए जाने वाले विश्लेषण उत्पादों का उत्पादन करते हैं। जैसा कि कंप्यूटर प्रौद्योगिकी ने अधिक संसाधन प्रदान किए, संकलक डिजाइन संकलन प्रक्रिया के साथ अपेक्षाकृत अधिक संरेखित हो सकते हैं।


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


डिजिटल कंप्यूटिंग के प्रारंभिक वर्षों के समय उच्च स्तरीय भाषा डिजाइन ने विभिन्न प्रकार के अनुप्रयोगों के लिए उपयोगी प्रोग्रामिंग उपकरण प्रदान किए:
डिजिटल कंप्यूटिंग के प्रारंभिक वर्षों के समय उच्च स्तरीय भाषा डिजाइन ने विभिन्न प्रकार के अनुप्रयोगों के लिए उपयोगी प्रोग्रामिंग उपकरण प्रदान किए:
* [[फोरट्रान]] (फॉर्मूला ट्रांसलेशन) को इंजीनियरिंग और विज्ञान अनुप्रयोगों के लिए पहली उच्च स्तरीय भाषा माना जाता है।<ref>{{cite book |first=John |last=Backus |chapter=The history of FORTRAN I, II and III |website=Softwarepreservation.org |title=प्रोग्रामिंग भाषाओं का इतिहास|chapter-url=http://www.softwarepreservation.org/projects/FORTRAN/paper/p25-backus.pdf |archive-url=https://ghostarchive.org/archive/20221010/http://www.softwarepreservation.org/projects/FORTRAN/paper/p25-backus.pdf |archive-date=2022-10-10 |url-status=live}}</ref>
* [[फोरट्रान]] (फॉर्मूला अनुवाद) को इंजीनियरिंग और विज्ञान अनुप्रयोगों के लिए पहली उच्च स्तरीय भाषा माना जाता है।<ref>{{cite book |first=John |last=Backus |chapter=The history of FORTRAN I, II and III |website=Softwarepreservation.org |title=प्रोग्रामिंग भाषाओं का इतिहास|chapter-url=http://www.softwarepreservation.org/projects/FORTRAN/paper/p25-backus.pdf |archive-url=https://ghostarchive.org/archive/20221010/http://www.softwarepreservation.org/projects/FORTRAN/paper/p25-backus.pdf |archive-date=2022-10-10 |url-status=live}}</ref>
* [[COBOL|कोबोल]] (सामान्य व्यवसाय उन्मुखी भाषा) [[ए-0 प्रणाली|ए-0]] और [[फ्लो-Matic|फ्लो-मैटिक]] से विकसित होकर व्यावसायिक अनुप्रयोगों के लिए प्रमुख उच्च-स्तरीय भाषा बन गई।<ref>Porter Adams, Vicki (5 October 1981). "Captain Grace M. Hopper: the Mother of COBOL". InfoWorld. 3 (20): 33. ISSN 0199-6649.</ref>
* [[COBOL|कोबोल]] (सामान्य व्यवसाय उन्मुखी भाषा) [[ए-0 प्रणाली|ए-0]] और [[फ्लो-Matic|फ्लो-मैटिक]] से विकसित होकर व्यावसायिक अनुप्रयोगों के लिए प्रमुख उच्च-स्तरीय भाषा बन गई।<ref>Porter Adams, Vicki (5 October 1981). "Captain Grace M. Hopper: the Mother of COBOL". InfoWorld. 3 (20): 33. ISSN 0199-6649.</ref>
* [[लिस्प (प्रोग्रामिंग भाषा)|एलआईएसपी (प्रोग्रामिंग भाषा)]] (सूची प्रोसेसर) प्रतीकात्मक संगणना के लिए।<ref>McCarthy, J.; Brayton, R.; Edwards, D.; Fox, P.; Hodes, L.; Luckham, D.; Maling, K.; Park, D.; Russell, S. (March 1960). "LISP I Programmers Manual" (PDF). Boston, Massachusetts: Artificial Intelligence Group, M.I.T. Computation Center and Research Laboratory.</ref>
* [[लिस्प (प्रोग्रामिंग भाषा)|एलआईएसपी (प्रोग्रामिंग भाषा)]] (सूची प्रोसेसर) प्रतीकात्मक संगणना के लिए।<ref>McCarthy, J.; Brayton, R.; Edwards, D.; Fox, P.; Hodes, L.; Luckham, D.; Maling, K.; Park, D.; Russell, S. (March 1960). "LISP I Programmers Manual" (PDF). Boston, Massachusetts: Artificial Intelligence Group, M.I.T. Computation Center and Research Laboratory.</ref>
डिजिटल कंप्यूटर के लिए निम्न-स्तरीय टारगेट प्रोग्राम में उच्च-स्तरीय स्रोत प्रोग्राम के पूरी तरह से परिभाषित परिवर्तन की आवश्यकता से संकलक तकनीक विकसित हुई। स्रोत कोड के विश्लेषण से संबद्ध करने के लिए संकलक को फ्रंट एंड के रूप में और टारगेट कोड में विश्लेषण को संश्लेषित करने के लिए बैक एंड के रूप मे देखा जा सकता है। फ्रंट एंड और बैक एंड के बीच अनुकूलन अधिक प्रभावशाली टारगेट कोड उत्पन्न कर सकता है।<ref>Compilers Principles, Techniques, & Tools 2nd edition by Aho, Lam, Sethi, Ullman {{ISBN |0-321-48681-1}}</ref>
डिजिटल कंप्यूटर के लिए निम्न-स्तरीय टारगेट प्रोग्राम में उच्च-स्तरीय स्रोत प्रोग्राम के पूरी तरह से परिभाषित परिवर्तन की आवश्यकता से संकलक तकनीक विकसित हुई। स्रोत कोड के विश्लेषण से संबद्ध करने के लिए संकलक को फ्रंट एंड के रूप में और टारगेट कोड में विश्लेषण को संश्लेषित करने के लिए बैक एंड के रूप मे देखा जा सकता है। फ्रंट एंड और बैक एंड के बीच अनुकूलन अधिक प्रभावशाली टारगेट कोड उत्पन्न कर सकता है।<ref>Compilers Principles, Techniques, & Tools 2nd edition by Aho, Lam, Sethi, Ullman {{ISBN |0-321-48681-1}}</ref>


संकलक प्रौद्योगिकी के विकास में कुछ प्रारंभिक मील के पत्थर:
संकलक प्रौद्योगिकी के विकास में कुछ प्रारंभिक उपलब्धियां:
* 1952: मैनचेस्टर विश्वविद्यालय में [[मैनचेस्टर मार्क I]] कंप्यूटर के लिए [[एलिक ग्लेनी]] द्वारा विकसित एक [[ऑटोकोड]] संकलक को कुछ लोगों द्वारा पहली संकलित प्रोग्रामिंग भाषा माना जाता है।
* 1952: मैनचेस्टर विश्वविद्यालय में [[मैनचेस्टर मार्क I]] कंप्यूटर के लिए [[एलिक ग्लेनी]] द्वारा विकसित एक [[ऑटोकोड]] संकलक को कुछ लोगों द्वारा पहली संकलित प्रोग्रामिंग भाषा माना जाता है।
* 1952: [[रेमिंगटन रैंड]] में [[ग्रेस हूपर]] की टीम ने A-0 प्रोग्रामिंग भाषा के लिए संकलक लिखा (और इसका वर्णन करने के लिए ''संकलक'' शब्द विकसित किया),<ref>{{cite journal |last1=Hopper |first1=Grace Murray |date=1952 |title=कंप्यूटर की शिक्षा|journal=Proceedings of the 1952 ACM National Meeting (Pittsburgh) |pages=243–249 |doi=10.1145/609784.609818 |s2cid=10081016}}</ref><ref>{{cite journal |last1=Ridgway |first1=Richard K. |date=1952 |title=संकलन दिनचर्या|journal=Proceedings of the 1952 ACM National Meeting (Toronto) |pages=1–5 |doi=10.1145/800259.808980 |s2cid=14878552}}
* 1952: [[रेमिंगटन रैंड]] में [[ग्रेस हूपर]] की टीम ने A-0 प्रोग्रामिंग भाषा के लिए संकलक लिखा (और इसका वर्णन करने के लिए ''संकलक'' शब्द विकसित किया),<ref>{{cite journal |last1=Hopper |first1=Grace Murray |date=1952 |title=कंप्यूटर की शिक्षा|journal=Proceedings of the 1952 ACM National Meeting (Pittsburgh) |pages=243–249 |doi=10.1145/609784.609818 |s2cid=10081016}}</ref><ref>{{cite journal |last1=Ridgway |first1=Richard K. |date=1952 |title=संकलन दिनचर्या|journal=Proceedings of the 1952 ACM National Meeting (Toronto) |pages=1–5 |doi=10.1145/800259.808980 |s2cid=14878552}}
</ref> हालांकि A-0 संकलक एक पूर्ण संकलक की आधुनिक धारणा की तुलना में एक लोडर या लिंकर के रूप में अधिक कार्य करता है।
</ref> हालांकि A-0 संकलक एक पूर्ण संकलक की आधुनिक धारणा की तुलना में एक लोडर या लिंकर के रूप में अधिक कार्य करता है।
* 1954-1957: [[आईबीएम]] में जॉन बैकस के नेतृत्व में एक टीम ने फोरट्रान विकसित किया जिसे सामान्यतः पहली उच्च-स्तरीय भाषा माना जाता है। 1957 में, उन्होंने एक फोरट्रान संकलक पूरा किया जिसे सामान्यतः पहले स्पष्ट रूप से पूर्ण संकलक के रूप में प्रस्तुत करने का श्रेय दिया जाता है।
* 1954-1957: [[आईबीएम]] में जॉन बैकस के नेतृत्व में एक टीम ने फोरट्रान विकसित किया जिसे सामान्यतः पहली उच्च-स्तरीय भाषा माना जाता है। 1957 में, उन्होंने एक फोरट्रान संकलक पूरा किया जिसे सामान्यतः पहले स्पष्ट रूप से पूर्ण संकलक के रूप में प्रस्तुत करने का श्रेय दिया जाता है।
* 1959: डेटाप्रणाली भाषा (कोडासिल) पर सम्मेलन ने के विकास की प्रारंभ की। कोबोल डिज़ाइन A-0 और फ्लो-मैटिक पर प्राप्त हुआ। 1960 के दशक के प्रारंभ तक कोबोल को कई संरचना पर संकलित किया गया था।
* 1959: डेटा प्रणाली भाषा (कोडासिल) पर सम्मेलन ने के विकास की प्रारंभ की। कोबोल डिज़ाइन A-0 और फ्लो-मैटिक पर प्राप्त हुआ। 1960 के दशक के प्रारंभ तक कोबोल को कई संरचना पर संकलित किया गया था।
* 1958-1960: [[Algol 58|एल्गोल 58]], [[ALGOL 60|एल्गोल 60]] का अग्रगामी था। एल्गोल 58 ने [[ब्लॉक (प्रोग्रामिंग)]] को प्रारंभ किया, जो [[संरचित प्रोग्रामिंग]] के उदय में एक महत्वपूर्ण प्रगति थी। एल्गोल 60 [[नेस्टेड समारोह|नेस्टेड फ़ंक्शन]] परिभाषाओं को [[शाब्दिक गुंजाइश|लेक्सिकल स्कोप]] के साथ क्रियान्वित करने वाली पहली भाषा थी। इसमें [[प्रत्यावर्तन|पुनरावर्तन]] सम्मिलित था। इसका सिंटैक्स बैकस-नौर फॉर्म का उपयोग करके परिभाषित किया गया था। एल्गोल 60 ने इसके बाद आने वाली कई भाषाओं को प्रेरित किया। [[टोनी होरे]] ने टिप्पणी की: ... यह न केवल अपने पूर्ववर्तियों पर बल्कि इसके लगभग सभी पूर्ववर्ती में भी सुधार था।<ref>{{cite web |first=C.A.R. |last=Hoare |title=प्रोग्रामिंग लैंग्वेज डिजाइन पर संकेत|date=December 1973 |url=http://www.eecs.umich.edu/~bchandra/courses/papers/Hoare_Hints.pdf |archive-url=https://ghostarchive.org/archive/20221010/http://www.eecs.umich.edu/~bchandra/courses/papers/Hoare_Hints.pdf |archive-date=2022-10-10 |url-status=live |page=27}} (This statement is sometimes erroneously attributed to [[Edsger W. Dijkstra]], also involved in implementing the first ALGOL 60 compiler.)</ref><ref name="r3rs">{{cite web |editor1-first=Jonathan |editor1-last=Rees |editor2-first=William |editor2-last=Clinger |author-first1=Hal |author-last1=Abelson |author-first2=R. K. |author-last2=Dybvig |title=एल्गोरिदमिक भाषा योजना पर संशोधित (3) रिपोर्ट, (ALGOL 60 की स्मृति को समर्पित)| url=http://groups.csail.mit.edu/mac/ftpdir/scheme-reports/r3rs-html/r3rs_toc.html
* 1958-1960: [[Algol 58|एल्गोल 58]], [[ALGOL 60|एल्गोल 60]] का अग्रगामी था। एल्गोल 58 ने [[ब्लॉक (प्रोग्रामिंग)]] को प्रारंभ किया, जो [[संरचित प्रोग्रामिंग]] के उदय में एक महत्वपूर्ण प्रगति थी। एल्गोल 60 [[नेस्टेड समारोह|नेस्टेड फ़ंक्शन]] परिभाषाओं को [[शाब्दिक गुंजाइश|लेक्सिकल स्कोप]] के साथ क्रियान्वित करने वाली पहली भाषा थी। इसमें [[प्रत्यावर्तन|पुनरावर्तन]] सम्मिलित था। इसका सिंटैक्स बैकस-नौर फॉर्म का उपयोग करके परिभाषित किया गया था। एल्गोल 60 ने इसके बाद आने वाली कई भाषाओं को प्रेरित किया। [[टोनी होरे]] ने टिप्पणी की: यह न केवल अपने पूर्ववर्तियों पर बल्कि इसके लगभग सभी पूर्ववर्ती में भी सुधार था।<ref>{{cite web |first=C.A.R. |last=Hoare |title=प्रोग्रामिंग लैंग्वेज डिजाइन पर संकेत|date=December 1973 |url=http://www.eecs.umich.edu/~bchandra/courses/papers/Hoare_Hints.pdf |archive-url=https://ghostarchive.org/archive/20221010/http://www.eecs.umich.edu/~bchandra/courses/papers/Hoare_Hints.pdf |archive-date=2022-10-10 |url-status=live |page=27}} (This statement is sometimes erroneously attributed to [[Edsger W. Dijkstra]], also involved in implementing the first ALGOL 60 compiler.)</ref><ref name="r3rs">{{cite web |editor1-first=Jonathan |editor1-last=Rees |editor2-first=William |editor2-last=Clinger |author-first1=Hal |author-last1=Abelson |author-first2=R. K. |author-last2=Dybvig |title=एल्गोरिदमिक भाषा योजना पर संशोधित (3) रिपोर्ट, (ALGOL 60 की स्मृति को समर्पित)| url=http://groups.csail.mit.edu/mac/ftpdir/scheme-reports/r3rs-html/r3rs_toc.html
|access-date=2009-10-20
|access-date=2009-10-20
|display-authors=etal}}</ref>
|display-authors=etal}}</ref>
* 1958-1962: एमआईटी में जॉन मैक्कार्थी (कंप्यूटर वैज्ञानिक) ने एलआईएसपी (प्रोग्रामिंग भाषा) डिजाइन किया।<ref>"[https://dspace.mit.edu/bitstream/handle/1721.1/6096/AIM-008.pdf?sequence=2 Recursive Functions of Symbolic Expressions and Their Computation by Machine]", Communications of the ACM, April 1960</ref> प्रतीक प्रसंस्करण क्षमताओं ने कृत्रिम बुद्धिमत्ता अनुसंधान के लिए उपयोगी सुविधाएँ प्रदान कीं। 1962 में, एलआईएसपी 1.5 प्रकाशन ने कुछ उपकरणों का उल्लेख किया: स्टीफन रसेल और डैनियल जे. एडवर्ड्स द्वारा लिखित एक अनुवादक, टिम हार्ट और माइक लेविन द्वारा लिखित एक संकलक और असेंबलर।<ref>{{cite book |title=लिस्प 1.5 प्रोग्रामर मैनुअल|publisher=The MIT Press |last1=McCarthy |first1=John |last2=Abrahams |first2=Paul W. |last3=Edwards |first3=Daniel J. |last4=Hart |first4=Timothy P. |last5=Levin |first5=Michael I. |url=https://books.google.com/books?id=68j6lEJjMQwC&pg=PR1 |isbn=9780262130110 |year=1965}}</ref>
* 1958-1962: एमआईटी में जॉन मैक्कार्थी (कंप्यूटर वैज्ञानिक) ने एलआईएसपी (प्रोग्रामिंग भाषा) डिजाइन किया।<ref>"[https://dspace.mit.edu/bitstream/handle/1721.1/6096/AIM-008.pdf?sequence=2 Recursive Functions of Symbolic Expressions and Their Computation by Machine]", Communications of the ACM, April 1960</ref> प्रतीक प्रसंस्करण क्षमताओं ने कृत्रिम बुद्धिमत्ता अनुसंधान के लिए उपयोगी सुविधाएँ प्रदान कीं। 1962 में, एलआईएसपी 1.5 प्रकाशन ने कुछ उपकरणों का उल्लेख किया: स्टीफन रसेल और डैनियल जे एडवर्ड्स द्वारा लिखित एक अनुवादक, टिम हार्ट और माइक लेविन द्वारा लिखित एक संकलक और असेंबलर।<ref>{{cite book |title=लिस्प 1.5 प्रोग्रामर मैनुअल|publisher=The MIT Press |last1=McCarthy |first1=John |last2=Abrahams |first2=Paul W. |last3=Edwards |first3=Daniel J. |last4=Hart |first4=Timothy P. |last5=Levin |first5=Michael I. |url=https://books.google.com/books?id=68j6lEJjMQwC&pg=PR1 |isbn=9780262130110 |year=1965}}</ref>
प्रारम्भिक ऑपरेटिंग सिस्टम और सॉफ्टवेयर असेंबली भाषा में लिखे गए थे। 1960 और 1970 के दशक के प्रारंभ में,प्रणाली प्रोग्रामिंग के लिए उच्च-स्तरीय भाषाओं का उपयोग संसाधन सीमाओं के कारण अभी भी विवादास्पद था। हालांकि, कई शोध और उद्योग प्रयासों ने उच्च-स्तरीयप्रणाली [[बी (प्रोग्रामिंग भाषा)|प्रोग्रामिंग भाषाओ]] की ओर परिवर्तन प्रारंभ किया, उदाहरण के लिए, [[BCPL|बीसीपीएल]], [[BLISS|ब्लिस]], बी (प्रोग्रामिंग भाषा), और सी (प्रोग्रामिंग भाषा)।
प्रारम्भिक ऑपरेटिंग सिस्टम और सॉफ्टवेयर असेंबली भाषा में लिखे गए थे। 1960 और 1970 के दशक के प्रारंभ में, प्रणाली प्रोग्रामिंग के लिए उच्च-स्तरीय भाषाओं का उपयोग संसाधन सीमाओं के कारण अभी भी विवादास्पद था। हालांकि, कई शोध और उद्योग प्रयासों ने उच्च-स्तरीयप्रणाली [[बी (प्रोग्रामिंग भाषा)|प्रोग्रामिंग भाषाओ]] की ओर परिवर्तन प्रारंभ किया, उदाहरण के लिए, [[BCPL|बीसीपीएल]], [[BLISS|ब्लिस]], बी (प्रोग्रामिंग भाषा), और सी (प्रोग्रामिंग भाषा)।


कैम्ब्रिज विश्वविद्यालय में [[मार्टिन रिचर्ड्स (कंप्यूटर वैज्ञानिक)]] द्वारा 1966 में डिज़ाइन किया गया बीसीपीएल (बेसिक संयुक्त प्रोग्रामिंग भाषा) मूल रूप से एक संकलक लेखन उपकरण के रूप में विकसित किया गया था।<ref>"[http://prog.vub.ac.be/~tjdhondt/ESL/BCPL_to_Cfront_files/p557-richards.pdf BCPL: A tool for compiler writing and system programming]" M. Richards, University Mathematical Laboratory Cambridge, England 1969</ref> कई संकलक क्रियान्वित किए गए हैं, रिचर्ड्स की पुस्तक भाषा और उसके संकलक को अंतर्दृष्टि प्रदान करती है।<ref>BCPL: The Language and Its Compiler, M Richards, Cambridge University Press (first published 31 December 1981)</ref> बीसीपीएल न केवल एक प्रभावशालीप्रणाली प्रोग्रामिंग भाषा थी जो अभी भी शोध में प्रयोग की जाती है<ref>The BCPL Cintsys and Cintpos User Guide, M. Richards, 2017</ref> बल्कि बी और सी भाषाओं के डिजाइन के लिए एक आधार भी प्रदान किया।
कैम्ब्रिज विश्वविद्यालय में [[मार्टिन रिचर्ड्स (कंप्यूटर वैज्ञानिक)]] द्वारा 1966 में डिज़ाइन किया गया बीसीपीएल (सामान्य संयुक्त प्रोग्रामिंग भाषा) मूल रूप से एक संकलक लेखन उपकरण के रूप में विकसित किया गया था।<ref>"[http://prog.vub.ac.be/~tjdhondt/ESL/BCPL_to_Cfront_files/p557-richards.pdf BCPL: A tool for compiler writing and system programming]" M. Richards, University Mathematical Laboratory Cambridge, England 1969</ref> कई संकलक क्रियान्वित किए गए हैं, रिचर्ड्स की पुस्तक भाषा और उसके संकलक को अंतर्दृष्टि प्रदान करती है।<ref>BCPL: The Language and Its Compiler, M Richards, Cambridge University Press (first published 31 December 1981)</ref> बीसीपीएल न केवल एक प्रभावशाली प्रणाली प्रोग्रामिंग भाषा थी जो अभी भी शोध में प्रयोग की जाती है<ref>The BCPL Cintsys and Cintpos User Guide, M. Richards, 2017</ref> बल्कि बी और सी भाषाओं के डिजाइन के लिए एक आधार भी प्रदान किया।


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


[[मॉलटिक्स]] (मल्टीप्लेक्स सूचना और कंप्यूटिंग सेवा), एक टाइम-शेयरिंग ऑपरेटिंग सिस्टम परियोजना, जिसमें एमआईटी, [[बेल लैब्स]], [[जनरल इलेक्ट्रिक]] (बाद में [[हनीवेल]]) सम्मिलित थे और इसका नेतृत्व एमआईटी के फर्नांडो कॉर्बेटो ने किया था।।<ref>{{cite web |first1=F. J. |last1=Corbató |last2=Vyssotsky |first2=V. A. |title=मल्टिक्स सिस्टम का परिचय और अवलोकन|work=1965 Fall Joint Computer Conference |publisher=Multicians.org |url=https://multicians.org/fjcc1.html}}</ref> मल्टिक्स आईबीएम और आईबीएम उपयोगकर्ता समूह द्वारा विकसित पीएल/आई भाषा में लिखा गया था।<ref>Report II of the SHARE Advanced Language Development Committee, 25 June 1964</ref> बीएम का लक्ष्य व्यवसाय, वैज्ञानिक औरप्रणाली प्रोग्रामिंग आवश्यकताओं को पूरा करना था ऐसी अन्य भाषाएँ थीं जिन पर विचार किया जा सकता था लेकिन पीएल/आई ने सबसे पूर्ण समाधान की प्रस्तुत की, तथापि इसे क्रियान्वित नहीं किया गया था।<ref>Multicians.org "The Choice of PL/I" article, Editor /tom Van Vleck</ref> मल्टिक्स परियोजना के पहले कुछ वर्षों के लिए, बेल लैब्स से डॉग मैक्लोरी और बॉब मॉरिस द्वारा अर्ली पीएल/आई (ईपीएल) संकलक के साथ भाषा के एक उपसमुच्चय को असेंबली भाषा में संकलित किया जा सकता है।<ref>"PL/I As a Tool for System Programming", F.J. Corbato, Datamation 6 May 1969 issue</ref> ईपीएल ने परियोजना का तब तक समर्थन किया जब तक कि पूर्ण पीएल/आई के लिए बूट-स्ट्रैपिंग संकलक विकसित नहीं किया जा सका।<ref>"[https://www.computer.org/csdl/proceedings/afips/1969/5074/00/50740187.pdf The Multics PL/1 Compiler]", R. A. Freiburghouse, GE, Fall Joint Computer Conference 1969</ref>
[[मॉलटिक्स]] (मल्टीप्लेक्स सूचना और कंप्यूटिंग सेवा), एक टाइम-शेयरिंग ऑपरेटिंग सिस्टम परियोजना, जिसमें एमआईटी, [[बेल लैब्स]], [[जनरल इलेक्ट्रिक]] (बाद में [[हनीवेल]]) सम्मिलित थे और इसका नेतृत्व एमआईटी के फर्नांडो कॉर्बेटो ने किया था।।<ref>{{cite web |first1=F. J. |last1=Corbató |last2=Vyssotsky |first2=V. A. |title=मल्टिक्स सिस्टम का परिचय और अवलोकन|work=1965 Fall Joint Computer Conference |publisher=Multicians.org |url=https://multicians.org/fjcc1.html}}</ref> मल्टिक्स आईबीएम और आईबीएम उपयोगकर्ता समूह द्वारा विकसित पीएल/आई भाषा में लिखा गया था।<ref>Report II of the SHARE Advanced Language Development Committee, 25 June 1964</ref> बीएम का लक्ष्य व्यवसाय, वैज्ञानिक और प्रणाली प्रोग्रामिंग आवश्यकताओं को पूरा करना था ऐसी अन्य भाषाएँ थीं जिन पर विचार किया जा सकता था लेकिन पीएल/आई ने सबसे पूर्ण समाधान की प्रस्तुत की, तथापि इसे क्रियान्वित नहीं किया गया था।<ref>Multicians.org "The Choice of PL/I" article, Editor /tom Van Vleck</ref> मल्टिक्स परियोजना के पहले कुछ वर्षों के लिए, बेल लैब्स से डॉग मैक्लोरी और बॉब मॉरिस द्वारा अर्ली पीएल/आई (ईपीएल) संकलक के साथ भाषा के एक उपसमुच्चय को असेंबली भाषा में संकलित किया जा सकता है।<ref>"PL/I As a Tool for System Programming", F.J. Corbato, Datamation 6 May 1969 issue</ref> ईपीएल ने परियोजना का तब तक समर्थन किया जब तक कि पूर्ण पीएल/आई के लिए बूट-स्ट्रैपिंग संकलक विकसित नहीं किया जा सका।<ref>"[https://www.computer.org/csdl/proceedings/afips/1969/5074/00/50740187.pdf The Multics PL/1 Compiler]", R. A. Freiburghouse, GE, Fall Joint Computer Conference 1969</ref>


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


बेल लैब्स ने बी और बीसीपीएल के आधार पर सी (प्रोग्रामिंग भाषा) का विकास और विस्तार प्रारंभ किया। बीसीपीएल संकलक को बेल लैब्स द्वारा मल्टिक्स में ले जाया गया था और बेल लैब्स में बीसीपीएल एक मुख्य भाषा थी।<ref>Dennis M. Ritchie, "[https://www.bell-labs.com/usr/dmr/www/chist.pdf The Development of the C Language]", ACM Second History of Programming Languages Conference, April 1993</ref> प्रारंभ में, बेल लैब्स के बी संकलक के लिए एक फ्रंट-एंड प्रोग्राम का उपयोग किया गया था, जब सी संकलक विकसित किया गया था। 1971 में, एक नए पीडीपी-11 ने बी को विस्तार परिभाषित करने और संकलक को पुनः लिखने के लिए संसाधन प्रदान किया। 1973 तक सी भाषा का डिजाइन अनिवार्य रूप से पूरा हो गया था और पीडीपी-11 के लिए यूनिक्स कर्नेल को सी में पुनः लिखा गया था। स्टीव जॉनसन ने पोर्टेबल सी संकलक (पीसीसी) का विकास प्रारंभ किया ताकि नई मशीनों के लिए सी संकलक के पुनः प्राप्ति का समर्थन किया जा सके।<ref>S.C. Johnson, "a Portable C Compiler: Theory and Practice", 5th ACM POPL Symposium, January 1978</ref><ref>A. Snyder, [https://apps.dtic.mil/sti/pdfs/ADA010218.pdf A Portable Compiler for the Language C], MIT, 1974.</ref>
बेल लैब्स ने बी और बीसीपीएल के आधार पर सी (प्रोग्रामिंग भाषा) का विकास और विस्तार प्रारंभ किया। बीसीपीएल संकलक को बेल लैब्स द्वारा मल्टिक्स में ले जाया गया था और बेल लैब्स में बीसीपीएल एक मुख्य भाषा थी।<ref>Dennis M. Ritchie, "[https://www.bell-labs.com/usr/dmr/www/chist.pdf The Development of the C Language]", ACM Second History of Programming Languages Conference, April 1993</ref> प्रारंभ में, बेल लैब्स के बी संकलक के लिए एक फ्रंट-एंड प्रोग्राम का उपयोग किया गया था, जब सी संकलक विकसित किया गया था। 1971 में, एक नए पीडीपी-11 ने बी को विस्तार परिभाषित करने और संकलक को पुनः लिखने के लिए संसाधन प्रदान किया। 1973 तक सी भाषा का डिजाइन अनिवार्य रूप से पूरा हो गया था और पीडीपी-11 के लिए यूनिक्स कर्नेल को सी में पुनः लिखा गया था। स्टीव जॉनसन ने पोर्टेबल सी संकलक (पीसीसी) का विकास प्रारंभ किया ताकि नई मशीनों के लिए सी संकलक के पुनः प्राप्ति का समर्थन किया जा सके।<ref>S.C. Johnson, "a Portable C Compiler: Theory and Practice", 5th ACM POPL Symposium, January 1978</ref><ref>A. Snyder, [https://apps.dtic.mil/sti/pdfs/ADA010218.pdf A Portable Compiler for the Language C], MIT, 1974.</ref>


[[वस्तु उन्मुख कार्यकर्म|वस्तु उन्मुख प्रोग्रामिंग]] (ओओपी) ने अनुप्रयोग विकास और संरक्षण के लिए कुछ दिलचस्प संभावनाएं प्रस्तुत कीं। [[वस्तु उन्मुख कार्यकर्म|वस्तु उन्मुख प्रोग्रामिंग]] अवधारणाएँ और पीछे जाती हैं लेकिन [[LISP|एलआईएसपी]] और [[सिमुला]] भाषा विज्ञान का भाग थीं।<ref>K. Nygaard, University of Oslo, Norway, "[http://www.cs.kent.edu/~durand/CS43101Fall2004/resources/BasicConceptsOOP-Nygaard1986.pdf Basic Concepts in Object Oriented Programming]", SIGPLAN Notices V21, 1986</ref> बेल लैब्स में, [[C++|सी++]] का विकास ओओपी में रुचि लेने लगा।<ref>B. Stroustrup: "What is Object-Oriented Programming?" Proceedings 14th ASU Conference, 1986.</ref> सी++ का पहली बार उपयोग 1980 मेंप्रणाली प्रोग्रामिंग के लिए किया गया था। प्रारंभिक डिजाइन ने सिमुला अवधारणाओं के साथ सी भाषा प्रणाली प्रोग्रामिंग क्षमताओं का लाभ उठाया। वस्तु-ओरिएंटेड सुविधाओं को 1983 में जोड़ा गया था।<ref>Bjarne Stroustrup, "An Overview of the C++ Programming Language", Handbook of Object Technology (Editor: Saba Zamir, {{ISBN |0-8493-3135-8}})</ref> सीफ्रंट प्रोग्राम ने सी84 भाषा संकलक के लिए सी++ फ्रंट-एंड क्रियान्वित किया और बाद के वर्षों में सी++ की लोकप्रियता बढ़ने के साथ कई सी++ संकलक विकसित किए गए।
[[वस्तु उन्मुख कार्यकर्म|वस्तु उन्मुख प्रोग्रामिंग]] (ओओपी) ने अनुप्रयोग विकास और संरक्षण के लिए कुछ रोचक संभावनाएं प्रस्तुत कीं। [[वस्तु उन्मुख कार्यकर्म|वस्तु उन्मुख प्रोग्रामिंग]] अवधारणाएँ अधिक समर्थन करती हैं लेकिन [[LISP|एलआईएसपी]] और [[सिमुला]] भाषा विज्ञान का भाग थीं।<ref>K. Nygaard, University of Oslo, Norway, "[http://www.cs.kent.edu/~durand/CS43101Fall2004/resources/BasicConceptsOOP-Nygaard1986.pdf Basic Concepts in Object Oriented Programming]", SIGPLAN Notices V21, 1986</ref> बेल लैब्स में, [[C++|सी++]] का विकास ओओपी में रुचि लेने लगा।<ref>B. Stroustrup: "What is Object-Oriented Programming?" Proceedings 14th ASU Conference, 1986.</ref> सी++ का पहली बार उपयोग 1980 में प्रणाली प्रोग्रामिंग के लिए किया गया था। प्रारंभिक डिजाइन ने सिमुला अवधारणाओं के साथ सी भाषा प्रणाली प्रोग्रामिंग क्षमताओं का लाभ उठाया। वस्तु-उन्मुख सुविधाओं को 1983 में जोड़ा गया था।<ref>Bjarne Stroustrup, "An Overview of the C++ Programming Language", Handbook of Object Technology (Editor: Saba Zamir, {{ISBN |0-8493-3135-8}})</ref> सीफ्रंट प्रोग्राम ने सी84 भाषा संकलक के लिए सी++ फ्रंट-एंड क्रियान्वित किया और बाद के वर्षों में सी++ की लोकप्रियता बढ़ने के साथ कई सी++ संकलक विकसित किए गए।


कई एप्लिकेशन डोमेन में, उच्च-स्तरीय भाषा का उपयोग करने का विचार शीघ्र से रुचि में आ गया। नई प्रोग्रामिंग भाषाओं द्वारा समर्थित विस्तारित कार्यक्षमता और कंप्यूटर संरचना की बढ़ती जटिलता के कारण, संकलक अधिक जटिल हो गए।
कई एप्लिकेशन डोमेन में, उच्च-स्तरीय भाषा का उपयोग करने का विचार शीघ्र से रुचि में आ गया। नई प्रोग्रामिंग भाषाओं द्वारा समर्थित विस्तारित कार्यक्षमता और कंप्यूटर संरचना की बढ़ती जटिलता के कारण, संकलक अधिक जटिल हो गए।
Line 76: Line 75:
अन्य एडीए संकलक प्रयास ब्रिटेन में यॉर्क विश्वविद्यालय में और जर्मनी में कार्लज़ूए विश्वविद्यालय में प्राप्त थे। अमेरिका में, वर्डिक्स (बाद में तर्कसंगत द्वारा अधिग्रहित) ने वर्डिक्स एडीए विकास प्रणाली (वीएडीएस) को सेना को दिया। वीएडीएस ने एक संकलक सहित विकास उपकरण का एक समूह प्रदान किया। यूनिक्स/वीएडीएस को विभिन्न प्रकार के यूनिक्स प्लेटफार्मों पर आयोजित किया जा सकता है जैसे डीईसी अल्ट्रिक्स और सन 3/60 सोलारिस को सेना सीईसीओएम मूल्यांकन में मोटोरोला 68020 पर योजनाबद्ध किया गया है।<ref>CECOM Center for Software Engineering Advanced Software Technology, "Final Report - Evaluation of the ACEC Benchmark Suite for Real-Time Applications", AD-A231 968, 1990</ref> शीघ्र ही कई एडीए संकलक उपलब्ध थे जो एडीए सत्यापन परीक्षण पास कर चुके थे। मुफ़्त सॉफ्टवेयर संस्थान जीएनयू परियोजना ने [[जीएनयू संकलक संग्रह]] (जीसीसी) विकसित किया है जो कई भाषाओं और लक्ष्यों का समर्थन करने के लिए एक प्रमुख क्षमता प्रदान करता है। एडीए संस्करण [[GNAT|जीएनएटी]] सबसे व्यापक रूप से उपयोग किए जाने वाले एडीए संकलकों में से एक है। जीएनएटी मुफ़्त है लेकिन व्यावसायिक समर्थन भी है, उदाहरण के लिए, एडीएकोर की स्थापना 1994 में एडीए के लिए व्यावसायिक सॉफ़्टवेयर समाधान प्रदान करने के लिए की गई थी। जीएनएटी प्रो में जीएनयू जीसीसी आधारित जीएनएटी सम्मिलित है जिसमें एक एकीकृत विकास वातावरण प्रदान करने के लिए एक उपकरण समूह है।
अन्य एडीए संकलक प्रयास ब्रिटेन में यॉर्क विश्वविद्यालय में और जर्मनी में कार्लज़ूए विश्वविद्यालय में प्राप्त थे। अमेरिका में, वर्डिक्स (बाद में तर्कसंगत द्वारा अधिग्रहित) ने वर्डिक्स एडीए विकास प्रणाली (वीएडीएस) को सेना को दिया। वीएडीएस ने एक संकलक सहित विकास उपकरण का एक समूह प्रदान किया। यूनिक्स/वीएडीएस को विभिन्न प्रकार के यूनिक्स प्लेटफार्मों पर आयोजित किया जा सकता है जैसे डीईसी अल्ट्रिक्स और सन 3/60 सोलारिस को सेना सीईसीओएम मूल्यांकन में मोटोरोला 68020 पर योजनाबद्ध किया गया है।<ref>CECOM Center for Software Engineering Advanced Software Technology, "Final Report - Evaluation of the ACEC Benchmark Suite for Real-Time Applications", AD-A231 968, 1990</ref> शीघ्र ही कई एडीए संकलक उपलब्ध थे जो एडीए सत्यापन परीक्षण पास कर चुके थे। मुफ़्त सॉफ्टवेयर संस्थान जीएनयू परियोजना ने [[जीएनयू संकलक संग्रह]] (जीसीसी) विकसित किया है जो कई भाषाओं और लक्ष्यों का समर्थन करने के लिए एक प्रमुख क्षमता प्रदान करता है। एडीए संस्करण [[GNAT|जीएनएटी]] सबसे व्यापक रूप से उपयोग किए जाने वाले एडीए संकलकों में से एक है। जीएनएटी मुफ़्त है लेकिन व्यावसायिक समर्थन भी है, उदाहरण के लिए, एडीएकोर की स्थापना 1994 में एडीए के लिए व्यावसायिक सॉफ़्टवेयर समाधान प्रदान करने के लिए की गई थी। जीएनएटी प्रो में जीएनयू जीसीसी आधारित जीएनएटी सम्मिलित है जिसमें एक एकीकृत विकास वातावरण प्रदान करने के लिए एक उपकरण समूह है।


उच्च-स्तरीय भाषाओं ने संकलक अनुसंधान और विकास को चलाना निरंतर रखा।केंद्र क्षेत्रों में अनुकूलन और स्वचालित कोड जनरेशन सम्मिलित हैं। प्रोग्रामिंग भाषाओं और विकास के वातावरण में प्रचलन ने संकलक तकनीक को प्रभावित किया। अधिक संकलक भाषा वितरण (पीईआरएल, जावा विकास किट) और एक आईडीई (वीएडीएस, एक्लिप्स, एडीए प्रो) के एक घटक के रूप में सम्मिलित हो गए। प्रौद्योगिकियों के अंतर्संबंध और अन्योन्याश्रय में वृद्धि हुई। वेब सेवाओं के आगमन ने वेब भाषाओं और स्क्रिप्टिंग भाषाओं के विकास को बढ़ावा दिया। स्क्रिप्ट्स कमांड लाइन इंटरफेस (सीएलआई) के प्रारम्भिक दिनों में वापस आती हैं जहां उपयोगकर्ता प्रणाली द्वारा निष्पादित किए जाने वाले आदेशों को प्रविष्ट कर सकता है। शेल प्रोग्राम लिखने के लिए भाषाओं के साथ उपयोगकर्ता शैल अवधारणाएँ विकसित हुईं। प्रारम्भिक विंडोज डिजाइनों ने एक साधारण बैच प्रोग्रामिंग क्षमता की प्रस्तुत की। इन भाषाओं के पारंपरिक परिवर्तन में एक अनुवादक का उपयोग किया गया था। जबकि व्यापक रूप से उपयोग नहीं किया जाता है, बैश और बैच संकलक लिखे गए हैं। हाल ही में परिष्कृत व्याख्या की गई भाषाएं विकासक टूल किट का भाग बन गईं। आधुनिक स्क्रिप्टिंग भाषाओं में पीएचपी, पायथन, रूबी और लुआ सम्मिलित हैं। (लुआ व्यापक रूप से खेल के विकास में उपयोग किया जाता है।) इन सभी में अनुवादक और संकलक समर्थन है।<ref>P.Biggar, E. de Vries, D. Gregg, "A Practical Solution for Scripting Language Compilers", submission to Science of Computer Programming, 2009</ref>
उच्च-स्तरीय भाषाओं ने संकलक अनुसंधान और विकास को निरंतर सक्रिय रखा। केंद्र क्षेत्रों में अनुकूलन और स्वचालित कोड जनरेशन सम्मिलित हैं। प्रोग्रामिंग भाषाओं और विकास के वातावरण में प्रचलन ने संकलक तकनीक को प्रभावित किया। अधिक संकलक भाषा वितरण (पीईआरएल, जावा विकास किट) और एक आईडीई (वीएडीएस, एक्लिप्स, एडीए प्रो) के एक घटक के रूप में सम्मिलित हो गए। प्रौद्योगिकियों के अंतर्संबंध और अन्योन्याश्रय में वृद्धि हुई। वेब सेवाओं के आगमन ने वेब भाषाओं और स्क्रिप्टिंग भाषाओं के विकास को बढ़ावा दिया। स्क्रिप्ट्स कमांड लाइन इंटरफेस (सीएलआई) के प्रारम्भिक दिनों में वापस आती हैं जहां उपयोगकर्ता प्रणाली द्वारा निष्पादित किए जाने वाले आदेशों को प्रविष्ट कर सकता है। शेल प्रोग्राम लिखने के लिए भाषाओं के साथ उपयोगकर्ता शैल अवधारणाएँ विकसित हुईं। प्रारम्भिक विंडोज डिजाइनों ने एक साधारण बैच प्रोग्रामिंग क्षमता की प्रस्तुत की। इन भाषाओं के पारंपरिक परिवर्तन में एक अनुवादक का उपयोग किया गया था। जबकि व्यापक रूप से उपयोग नहीं किया जाता है, बैश और बैच संकलक लिखे गए हैं। हाल ही में परिष्कृत व्याख्या की गई भाषाएं विकासक टूल किट का भाग बन गईं। आधुनिक स्क्रिप्टिंग भाषाओं में पीएचपी, पायथन, रूबी और लुआ सम्मिलित हैं। (लुआ व्यापक रूप से खेल के विकास में उपयोग किया जाता है) इन सभी में अनुवादक और संकलक समर्थन है।<ref>P.Biggar, E. de Vries, D. Gregg, "A Practical Solution for Scripting Language Compilers", submission to Science of Computer Programming, 2009</ref>


जब 50 के दशक के उत्तरार्ध में संकलन का क्षेत्र प्रारंभ हुआ, तो इसका ध्यान उच्च-स्तरीय भाषा प्रोग्रामों के मशीन कोड में अनुवाद तक सीमित था ... संकलक क्षेत्र कंप्यूटर संरचना, प्रोग्रामिंग भाषाओं, औपचारिक तरीकों, इंजीनियरिंग, और कंप्यूटर सुरक्षा सॉफ्टवेयर सहित अन्य विषयों के साथ तीव्रता से जुड़ा हुआ है। ।<ref>M.Hall, D. Padua, K. Pingali, "Compiler Research: The Next 50 Years", ACM Communications 2009 Vol 54 #2</ref> <nowiki>''</nowiki>संकलक अनुसंधान: द नेक्स्ट 50 इयर्स<nowiki>''</nowiki> लेख ने वस्तु-उन्मुख भाषा और जावा के महत्व पर ध्यान दिया। भविष्य के अनुसंधान लक्ष्यों में सुरक्षा और समानांतर कंप्यूटिंग का उल्लेख किया गया।
जब 50 के दशक के उत्तरार्ध में संकलन का क्षेत्र प्रारंभ हुआ, तो इसका ध्यान उच्च-स्तरीय भाषा प्रोग्रामों के मशीन कोड में अनुवाद तक सीमित था संकलक क्षेत्र कंप्यूटर संरचना, प्रोग्रामिंग भाषाओं, औपचारिक तरीकों, इंजीनियरिंग, और कंप्यूटर सुरक्षा सॉफ्टवेयर सहित अन्य विषयों के साथ तीव्रता से जुड़ा हुआ है। ।<ref>M.Hall, D. Padua, K. Pingali, "Compiler Research: The Next 50 Years", ACM Communications 2009 Vol 54 #2</ref> <nowiki>''</nowiki>संकलक अनुसंधान: द नेक्स्ट 50 इयर्स<nowiki>''</nowiki> लेख ने वस्तु-उन्मुख भाषा और जावा के महत्व पर ध्यान दिया। भविष्य के अनुसंधान लक्ष्यों में सुरक्षा और समानांतर कंप्यूटिंग का उल्लेख किया गया।


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


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


एकल पास में संकलन का दोष यह है कि उच्च गुणवत्ता वाले कोड उत्पन्न करने के लिए आवश्यक कई परिष्कृत [[संकलक अनुकूलन]] करना संभव नहीं है। यह गणना करना पूर्ण रूप से कठिन हो सकता है कि एक अधिकतम संकलक कितने पास करता है। उदाहरण के लिए, अनुकूलन के विभिन्न चरण एक अभिव्यक्ति का कई बार विश्लेषण कर सकते हैं लेकिन केवल एक बार अन्य अभिव्यक्ति का विश्लेषण कर सकते हैं।
एकल पास में संकलन का दोष यह है कि उच्च गुणवत्ता वाले कोड उत्पन्न करने के लिए आवश्यक कई परिष्कृत [[संकलक अनुकूलन]] करना संभव नहीं है। यह गणना करना पूर्ण रूप से कठिन हो सकता है कि एक अधिकतम संकलक कितने पास करता है। उदाहरण के लिए, अनुकूलन के विभिन्न चरण एक अभिव्यक्ति का कई बार विश्लेषण कर सकते हैं लेकिन केवल एक बार अन्य अभिव्यक्ति का विश्लेषण कर सकते हैं।
Line 100: Line 99:
=== तीन चरण संकलक संरचना ===
=== तीन चरण संकलक संरचना ===
[[File:Compiler design.svg|thumb|center|upright=2.5|संकलक डिजाइन]]संकलक डिजाइन में चरणों की शुद्धता से संख्या के होने पर भी, चरणों को तीन चरणों में से एक को नियुक्त किया जा सकता है। चरणों में एक फ्रंट एंड, एक मिडिल एंड और एक बैक एंड सम्मिलित है।
[[File:Compiler design.svg|thumb|center|upright=2.5|संकलक डिजाइन]]संकलक डिजाइन में चरणों की शुद्धता से संख्या के होने पर भी, चरणों को तीन चरणों में से एक को नियुक्त किया जा सकता है। चरणों में एक फ्रंट एंड, एक मिडिल एंड और एक बैक एंड सम्मिलित है।
* फ्रंट एंड इनपुट को स्कैन करता है और एक विशिष्ट स्रोत भाषा के अनुसार सिंटैक्स और सिमेंटिक्स की पुष्टि करता है। [[टाइप सिस्टम|टाइप प्रणाली]] के लिए यह टाइप की जानकारी एकत्र करके [[टाइप]] [[प्रकार की जाँच|की जाँच]] करता है। यदि इनपुट प्रोग्राम वाक्यात्मक रूप से गलत है या इसमें टाइप त्रुटि है, तो यह त्रुटि और/या चेतावनी संदेश उत्पन्न करता है, सामान्यतः स्रोत कोड में उस स्थान की पहचान करता है जहां समस्या का पता चला था; कुछ स्थितियों में वास्तविक त्रुटि प्रोग्राम में पहले (बहुत) हो सकती है। फ्रंट एंड के पहलुओं में लेक्सिकल विश्लेषण, सिंटैक्स एनालिसिस और सिमेंटिक एनालिसिस सम्मिलित हैं। मिडिल एंड द्वारा आगे की प्रक्रिया के लिए फ्रंट एंड इनपुट प्रोग्राम को एक मध्यवर्ती प्रतिनिधित्व (आईआर) में परिवर्तित कर देता है। यह मध्यवर्ती प्रतिनिधित्व सामान्यतः स्रोत कोड के संबंध में प्रोग्राम का निम्न स्तर का प्रतिनिधित्व है।
* फ्रंट एंड इनपुट को स्कैन करता है और एक विशिष्ट स्रोत भाषा के अनुसार सिंटैक्स और सिमेंटिक्स की पुष्टि करता है। [[टाइप सिस्टम|टाइप प्रणाली]] के लिए यह टाइप की जानकारी एकत्र करके [[टाइप]] [[प्रकार की जाँच|की जाँच]] करता है। यदि इनपुट प्रोग्राम वाक्यात्मक रूप से गलत है या इसमें टाइप त्रुटि है, तो यह त्रुटि और/या चेतावनी संदेश उत्पन्न करता है, सामान्यतः स्रोत कोड में उस स्थान की पहचान करता है जहां समस्या का पता चला था; कुछ स्थितियों में वास्तविक त्रुटि प्रोग्राम में पहले (बहुत) हो सकती है। फ्रंट एंड के स्वरूपों में लेक्सिकल विश्लेषण, सिंटैक्स एनालिसिस और सिमेंटिक एनालिसिस सम्मिलित हैं। मिडिल एंड द्वारा आगे की प्रक्रिया के लिए फ्रंट एंड इनपुट प्रोग्राम को एक मध्यवर्ती प्रतिनिधित्व (आईआर) में परिवर्तित कर देता है। यह मध्यवर्ती प्रतिनिधित्व सामान्यतः स्रोत कोड के संबंध में प्रोग्राम का निम्न स्तर का प्रतिनिधित्व है।
* मिडिल एंड मध्यवर्ती प्रतिनिधित्व पर अनुकूलन करता है जो योजनाबद्ध सीपीयू संरचना से स्वतंत्र होते हैं। इस स्रोत कोड/मशीन कोड स्वतंत्रता का उद्देश्य विभिन्न भाषाओं और टारगेट प्रोसेसर का समर्थन करने वाले संकलक के संस्करणों के बीच साझा किए जाने वाले सामान्य अनुकूलन को सक्षम करना है। मिडिल एंड अनुकूलन के उदाहरण अनुपयोगी ([[निष्क्रिय]][[डेड-कोड उन्मूलन|-कोड उन्मूलन]]) या अगम्य कोड ([[पहुंच क्षमता विश्लेषण|अभिगम्यता विश्लेषण]]) को हटाना, निरंतर मूल्यों की खोज और प्रसार (निरंतर प्रचार), बार-बार कम निष्पादित स्थान पर गणना का स्थानांतरण (जैसे, लूप से बाहर) ), या संदर्भ के आधार पर गणना की विशेषज्ञता, अंततः अनुकूलित मध्यवर्ती प्रतिनिधित्व का उत्पादन करती है जिसका उपयोग बैक एंड द्वारा किया जाता है।
* मिडिल एंड मध्यवर्ती प्रतिनिधित्व पर अनुकूलन करता है जो योजनाबद्ध सीपीयू संरचना से स्वतंत्र होते हैं। इस स्रोत कोड/मशीन कोड स्वतंत्रता का उद्देश्य विभिन्न भाषाओं और टारगेट प्रोसेसर का समर्थन करने वाले संकलक के संस्करणों के बीच साझा किए जाने वाले सामान्य अनुकूलन को सक्षम करना है। मिडिल एंड अनुकूलन के उदाहरण अनुपयोगी ([[निष्क्रिय]][[डेड-कोड उन्मूलन|-कोड उन्मूलन]]) या अगम्य कोड ([[पहुंच क्षमता विश्लेषण|अभिगम्यता विश्लेषण]]) को हटाना, निरंतर मूल्यों की खोज और प्रसार (निरंतर प्रचार), बार-बार कम निष्पादित स्थान पर गणना का स्थानांतरण (जैसे, लूप से बाहर) ), या संदर्भ के आधार पर गणना की विशेषज्ञता, अंततः अनुकूलित मध्यवर्ती प्रतिनिधित्व का उत्पादन करती है जिसका उपयोग बैक एंड द्वारा किया जाता है।
* बैक एंड मिडिल एंड से अनुकूलित मध्यवर्ती प्रतिनिधित्व लेता है। यह अधिक विश्लेषण, परिवर्तन और अनुकूलन कर सकता है जो टारगेट सीपीयू संरचना के लिए विशिष्ट हैं। बैक एंड टारगेट-निर्भर असेंबली कोड उत्पन्न करता है, प्रक्रिया में लिपिबद्ध आवंटन करता है। बैक एंड [[निर्देश समयबद्धन|अनुदेश अनुसूचन]] करता है, जो [[देरी स्लॉट|विलंब स्लॉट]] को भरकर समानांतर कार्यान्वयन इकाइयों को कार्यरत रखने के निर्देशों को पुनः आदेश देता है। हालांकि अधिकांश अनुकूलन समस्याएं [[एनपी-कठोरता|एनपी-हार्ड]] |हैं, उन्हें हल करने के लिए ह्यूरिस्टिक (कंप्यूटर विज्ञान) तकनीकें अच्छी तरह से विकसित हैं और वर्तमान में उत्पादन-गुणवत्ता वाले कंपाइलरों में क्रियान्वित हैं। सामान्यतः बैक एंड का आउटपुट एक विशेष प्रोसेसर और ऑपरेटिंग सिस्टम के लिए विशिष्ट मशीन कोड होता है।
* बैक एंड मिडिल एंड से अनुकूलित मध्यवर्ती प्रतिनिधित्व लेता है। यह अधिक विश्लेषण, परिवर्तन और अनुकूलन कर सकता है जो टारगेट सीपीयू संरचना के लिए विशिष्ट हैं। बैक एंड टारगेट-निर्भर असेंबली कोड उत्पन्न करता है, प्रक्रिया में लिपिबद्ध आवंटन करता है। बैक एंड [[निर्देश समयबद्धन|अनुदेश अनुसूचन]] करता है, जो [[देरी स्लॉट|विलंब स्लॉट]] को भरकर समानांतर कार्यान्वयन इकाइयों को कार्यरत रखने के निर्देशों को पुनः आदेश देता है। हालांकि अधिकांश अनुकूलन समस्याएं [[एनपी-कठोरता|एनपी-हार्ड]] हैं, उन्हें हल करने के लिए ह्यूरिस्टिक (कंप्यूटर विज्ञान) तकनीकें अच्छी तरह से विकसित हैं और वर्तमान में उत्पादन-गुणवत्ता वाले कंपाइलरों में क्रियान्वित हैं। सामान्यतः बैक एंड का आउटपुट एक विशेष प्रोसेसर और ऑपरेटिंग सिस्टम के लिए विशिष्ट मशीन कोड होता है।


ययह फ्रंट/मिडल/बैक-एंड दृष्टिकोण मिडिल एंड के अनुकूलन को साझा करते हुए विभिन्न सेंट्रल प्रोसेसिंग यूनिट के लिए बैक एंड के साथ विभिन्न भाषाओं के लिए फ्रंट एंड को जोड़ना संभव बनाता है।<ref>Cooper and Torczon 2012, p. 8</ref> इस दृष्टिकोण के व्यवहार्य उदाहरण जीएनयू संकलक संग्रह,क्लैंग (एलएलवीएम-आधारित सी/सी++ कंपाइलर),<ref name=LattnerBook1st>{{cite book | author = Lattner, Chris |editor = Brown, Amy |editor2=Wilson, Greg | date = 2017 | chapter = LLVM | title = ओपन सोर्स एप्लिकेशन का आर्किटेक्चर| chapter-url = http://www.aosabook.org/en/llvm.html | access-date = 28 February 2017 | url-status = live | archive-url = https://web.archive.org/web/20161202070941/http://aosabook.org/en/llvm.html | archive-date = 2 December 2016}}</ref> और [[एम्स्टर्डम संकलक किट]], जिसमें कई फ्रंट-एंड, साझा अनुकूलन और कई बैक-एंड हैं।
ययह फ्रंट/मिडल/बैक-एंड दृष्टिकोण मिडिल एंड के अनुकूलन को साझा करते हुए विभिन्न सेंट्रल प्रोसेसिंग यूनिट के लिए बैक एंड के साथ विभिन्न भाषाओं के लिए फ्रंट एंड को जोड़ना संभव बनाता है।<ref>Cooper and Torczon 2012, p. 8</ref> इस दृष्टिकोण के व्यवहार्य उदाहरण जीएनयू संकलक संग्रह,क्लैंग (एलएलवीएम-आधारित सी/सी++ कंपाइलर),<ref name=LattnerBook1st>{{cite book | author = Lattner, Chris |editor = Brown, Amy |editor2=Wilson, Greg | date = 2017 | chapter = LLVM | title = ओपन सोर्स एप्लिकेशन का आर्किटेक्चर| chapter-url = http://www.aosabook.org/en/llvm.html | access-date = 28 February 2017 | url-status = live | archive-url = https://web.archive.org/web/20161202070941/http://aosabook.org/en/llvm.html | archive-date = 2 December 2016}}</ref> और [[एम्स्टर्डम संकलक किट]], जिसमें कई फ्रंट-एंड, साझा अनुकूलन और कई बैक-एंड हैं।
Line 109: Line 108:
[[File:Xxx Scanner and parser example for C.gif|thumb|right|400px| संदर्भ-मुक्त भागों को ग्रहण करते हैं।]]फ्रंट एंड प्रोग्राम का आंतरिक प्रतिनिधित्व बनाने के लिए स्रोत कोड का विश्लेषण करता है, जिसे मध्यवर्ती प्रतिनिधित्व (आईआर) कहा जाता है। यह [[प्रतीक तालिका|प्रतीक सारणी]] का प्रबंधन भी करता है, एक डेटा संरचना जो स्रोत कोड में प्रत्येक प्रतीक को संबंधित जानकारी जैसे स्थान, प्रकार और विस्तार से पता लगाती है।
[[File:Xxx Scanner and parser example for C.gif|thumb|right|400px| संदर्भ-मुक्त भागों को ग्रहण करते हैं।]]फ्रंट एंड प्रोग्राम का आंतरिक प्रतिनिधित्व बनाने के लिए स्रोत कोड का विश्लेषण करता है, जिसे मध्यवर्ती प्रतिनिधित्व (आईआर) कहा जाता है। यह [[प्रतीक तालिका|प्रतीक सारणी]] का प्रबंधन भी करता है, एक डेटा संरचना जो स्रोत कोड में प्रत्येक प्रतीक को संबंधित जानकारी जैसे स्थान, प्रकार और विस्तार से पता लगाती है।


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


फ्रंट एंड के मुख्य चरणों में निम्नलिखित सम्मिलित हैं:
फ्रंट एंड के मुख्य चरणों में निम्नलिखित सम्मिलित हैं:
Line 133: Line 132:


==== बैक एंड ====
==== बैक एंड ====
बैक एंड सीपीयू संरचना विशिष्ट अनुकूलन और कोड जनरेशन (संकलक) के लिए अधीन है<ref name="Hjort Blindell, Gabriel"/>.