हाई-लेवल प्रोग्रामिंग लैंग्वेज: Difference between revisions

From Vigyanwiki
 
(11 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Short description|Programming language with strong abstraction from details of hardware}}
{{Short description|Programming language with strong abstraction from details of hardware}}
[[कंप्यूटर]] विज्ञान में, '''उच्च-स्तरीय प्रोग्रामिंग भाषा''' एक प्रोग्रामिंग भाषा है जो कंप्यूटर के विवरणों से मजबूत अलगाव रखती है। [[निम्न-स्तरीय प्रोग्रामिंग भाषा]]ओं के विपरीत में, यह [[प्राकृतिक भाषा]] तत्वों का उपयोग कर सकती है, संचालन में सरलता उत्पन्न कर सकती है,  या यह कम्प्यूटिंग सिस्टमों के महत्वपूर्ण क्षेत्रों को स्वचालित कर सकती है जैसे कि मेमोरी प्रबंधन, जिससे प्रोग्राम विकसित करने की प्रक्रिया को एक नीचे-स्तर की भाषा का उपयोग करते समय सरल और समझने योग्य बना दी जा सकती है। प्रदान की गई अमूर्तता की मात्रा परिभाषित करती है कि कितनी उच्च स्तरीय प्रोग्रामिंग भाषा होती है।<ref>[https://web.archive.org/web/20070826224349/http://www.ittc.ku.edu/hybridthreads/glossary/index.php HThreads - RD Glossary<!-- Bot generated title -->]</ref>
[[कंप्यूटर]] विज्ञान में, '''हाई-लेवल प्रोग्रामिंग लैंग्वेज''' एक प्रोग्रामिंग लैंग्वेज है जो कंप्यूटर के विवरणों से मजबूत संक्षेपण रखती है। [[निम्न-स्तरीय प्रोग्रामिंग भाषा|लो-लेवल प्रोग्रामिंग लैंग्वेजो]] के विपरीत में, यह [[प्राकृतिक भाषा|प्राकृतिक लैंग्वेज]] तत्वों का उपयोग कर सकती है, संचालन में सरलता उत्पन्न कर सकती है,  या यह कम्प्यूटिंग सिस्टमों के महत्वपूर्ण क्षेत्रों को स्वचालित कर सकती है जैसे कि मेमोरी प्रबंधन, जिससे प्रोग्राम विकसित करने की प्रक्रिया को एक लो-लेवल लैंग्वेज का उपयोग करते समय सरल और समझने योग्य बना दी जा सकती है। प्रदान की गई संक्षेपण की मात्रा परिभाषित करती है कि कितनी हाई-लेवल प्रोग्रामिंग लैंग्वेज होती है।<ref>[https://web.archive.org/web/20070826224349/http://www.ittc.ku.edu/hybridthreads/glossary/index.php HThreads - RD Glossary<!-- Bot generated title -->]</ref>


1960 के दशक में, एक [[संकलक]] का उपयोग करने वाली एक उच्च-स्तरीय प्रोग्रामिंग भाषा को सामान्यतः [[ऑटोकोड|टोकोड]] कहा जाता था।<ref name="kleith">{{cite book|last=London|first=Keith|year=1968|title=Introduction to Computers|publisher=Faber and Faber Limited|location=24 Russell Square London WC1|isbn=0571085938|page=184|chapter=4, Programming|quote=The 'high' level programming languages are often called autocodes and the processor program, a compiler.}}<!--The book has no ISBN number, instead it has an SBN number. There is no typo in the prior sentence.--></ref>[[COBOL|कोबोल]] और [[फोरट्रान]] ऑटोकोड के उदाहरण हैं।<ref name="kleith2">{{cite book|last=London|first=Keith|title=Introduction to Computers|year=1968|publisher=Faber and Faber Limited|location=24 Russell Square London WC1|isbn=0571085938|page=186|chapter=4, Programming|quote=Two high level programming languages which can be used here as examples to illustrate the structure and purpose of autocodes are COBOL (Common Business Oriented Language) and FORTRAN (Formular Translation).}}<!--The book has no ISBN number, instead it has an SBN number. There is no typo in the prior sentence.--></ref>कंप्यूटर के लिए डिज़ाइन की गई पहली उच्च-स्तरीय प्रोग्रामिंग भाषा प्लैंकलकुल थी, जिसे [[कोनराड ज़्यूस]] द्वारा बनाया गया था।<ref>{{ill|Wolfgang Giloi{{!}}Giloi, Wolfgang, K.|de|Wolfgang Giloi}} (1997). "Konrad Zuse's Plankalkül: The First High-Level "non von Neumann" Programming Language". IEEE Annals of the History of Computing, vol. 19, no. 2, pp.&nbsp;17–24,  April–June, 1997. [http://doi.ieeecomputersociety.org/10.1109/85.586068 (abstract)]</ref> यद्यपि, यह उनके समय में लागू नहीं किया गया था, और उनके मूल योगदान को [[द्वितीय विश्व युद्ध]] के कारण अन्य विकासों से काफी हद तक अलग कर दिया गया था, एक तरफ [[हेंज रूटिशॉसर]] द्वारा सुपरप्लान भाषा पर भाषा के प्रभाव से और कुछ सीमा तक [[ALGOL|एलगोल]] भाषा पर प्रभाव था। पहली उल्लेखनीय रूप से व्यापक उच्च-स्तरीय भाषा फोरट्रान थी, जो आईबीएम के पहले के ऑटोकोड सिस्टम का एक मशीन-स्वतंत्र विकास था। एलगोल परिवार, [[ALGOL 58|एलगोल 58]] के साथ 1958 में परिभाषित किया गया और [[ALGOL 60|एलगोल 60]] 1960 में यूरोपीय और अमेरिकी कंप्यूटर वैज्ञानिकों की समितियों द्वारा परिभाषित किया गया, जिसमें पुनरावर्तन के साथ-साथ [[नेस्टेड फ़ंक्शन]] को [[शाब्दिक गुंजाइश|शाब्दिक विस्तार]] के अंतर्गत प्रस्तुत किया गया।
1960 के दशक में, कंपाइलर का उपयोग करने वाली एक हाई-लेवल प्रोग्रामिंग लैंग्वेज को सामान्यतः ऑटोकोड कहा जाता था।<ref name="kleith">{{cite book|last=London|first=Keith|year=1968|title=Introduction to Computers|publisher=Faber and Faber Limited|location=24 Russell Square London WC1|isbn=0571085938|page=184|chapter=4, Programming|quote=The 'high' level programming languages are often called autocodes and the processor program, a compiler.}}<!--The book has no ISBN number, instead it has an SBN number. There is no typo in the prior sentence.--></ref>[[COBOL|कोबोल]] और [[फोरट्रान]] ऑटोकोड के उदाहरण हैं।<ref name="kleith2">{{cite book|last=London|first=Keith|title=Introduction to Computers|year=1968|publisher=Faber and Faber Limited|location=24 Russell Square London WC1|isbn=0571085938|page=186|chapter=4, Programming|quote=Two high level programming languages which can be used here as examples to illustrate the structure and purpose of autocodes are COBOL (Common Business Oriented Language) and FORTRAN (Formular Translation).}}<!--The book has no ISBN number, instead it has an SBN number. There is no typo in the prior sentence.--></ref>कंप्यूटर के लिए डिज़ाइन की गई पहली हाई-लेवल प्रोग्रामिंग लैंग्वेज प्लैंकलकुल थी, जिसे [[कोनराड ज़्यूस]] द्वारा बनाया गया था।<ref>{{ill|Wolfgang Giloi{{!}}Giloi, Wolfgang, K.|de|Wolfgang Giloi}} (1997). "Konrad Zuse's Plankalkül: The First High-Level "non von Neumann" Programming Language". IEEE Annals of the History of Computing, vol. 19, no. 2, pp.&nbsp;17–24,  April–June, 1997. [http://doi.ieeecomputersociety.org/10.1109/85.586068 (abstract)]</ref> यद्यपि, यह उनके समय में लागू नहीं किया गया था, और उनके मूल योगदान को [[द्वितीय विश्व युद्ध]] के कारण अन्य विकासों से काफी हद तक अलग कर दिया गया था, एक तरफ [[हेंज रूटिशॉसर]] द्वारा सुपरप्लान लैंग्वेज पर लैंग्वेज के प्रभाव से और कुछ सीमा तक [[ALGOL|एलगोल]] लैंग्वेज पर प्रभाव था। पहली उल्लेखनीय रूप से व्यापक हाई-लेवल लैंग्वेज फोरट्रान थी, जो आईबीएम के पहले के ऑटोकोड सिस्टम का एक मशीन-स्वतंत्र विकास था। एलगोल परिवार, [[ALGOL 58|एलगोल 58]] के साथ 1958 में परिभाषित किया गया और [[ALGOL 60|एलगोल 60]] 1960 में यूरोपीय और अमेरिकी कंप्यूटर वैज्ञानिकों की समितियों द्वारा परिभाषित किया गया, जिसमें पुनरावर्तन के साथ-साथ [[नेस्टेड फ़ंक्शन]] को [[शाब्दिक गुंजाइश|शाब्दिक विस्तार]] के अंतर्गत प्रस्तुत किया गया।


एलगोल 60 ने यह भी पहली भाषा थी जिसमें मूल्य और नाम-पैरामीटरों के बीच स्पष्ट भिन्नता थी और उनके संबंधित सेमैंटिक्स थी।  एलगोल ने भी कई [[संरचित प्रोग्रामिंग]] अवधारणाओं को प्रस्तुत किया, जैसे कि <code>while-do</code>और<code>if-then-else</code>निर्माण, और इसकी सिंटैक्स पहली बार औपचारिक नोटेशन में वर्णित की गई थी - बैकस-नौर फॉर्म (बीएनएफ) लगभग उसी समय, कोबोल ने रेकॉर्ड को  प्रस्तुत किया और लिस्प ने पहली बार [[लिस्प (प्रोग्रामिंग भाषा)|प्रोग्रामिंग भाषा]] में पूरी तरह से सामान्य [[लैम्ब्डा अमूर्त]] को प्रस्तुत किया।
एलगोल 60 ने यह भी पहली लैंग्वेज थी जिसमें मूल्य और नाम-पैरामीटरों के बीच स्पष्ट भिन्नता थी और उनके संबंधित सेमैंटिक्स थी।  एलगोल ने भी कई [[संरचित प्रोग्रामिंग|स्ट्रक्चर्ड प्रोग्रामिंग]] अवधारणाओं को प्रस्तुत किया, जैसे कि <code>while-do</code>और<code>if-then-else</code>निर्माण, और इसकी सिंटैक्स पहली बार औपचारिक नोटेशन में वर्णित की गई थी - बैकस-नौर फॉर्म (बीएनएफ) लगभग उसी समय, कोबोल ने रेकॉर्ड को  प्रस्तुत किया और लिस्प ने पहली बार [[लिस्प (प्रोग्रामिंग भाषा)|प्रोग्रामिंग लैंग्वेज]] में पूरी तरह से सामान्य [[लैम्ब्डा अमूर्त]] को प्रस्तुत किया।


== सुविधाएँ ==
== सुविधाएँ ==
  उच्च स्तरीय भाषा [[मशीन भाषा]] मशीन भाषा से अधिक अवसरण के उच्च स्तर को सूचित करती है। यहां पर रजिस्टर, मेमोरी पतों, और कॉल स्टैक्स के साथ नहीं, उच्च-स्तरीय भाषाएँ परिवर्तनीयों, सारणी, ऑब्जेक्ट्स, संशोधित अंशिक अंकगणित या बूल अभिव्यक्तियों, सबरूटीन्स और फ़ंक्शन्स, लूप्स, थ्रेड्स, लॉक्स, और अन्य अवसरण के सम्प्रेरणात्मक संज्ञान और अबस्ट्रैक्ट कंप्यूटर विज्ञान के अन्य अवसरणों के साथ व्यवहार करती हैं, जिसमें प्रोग्राम की दक्षता को महत्व दिया जाता है उपयोजनिम प्रोग्राम कुशलता के ऊपर। निम्न-स्तरीय असेंबली भाषाओं की तरह, उच्च-स्तरीय भाषाओं में कुछ भाषा तत्व होते हैं, अगर कोई, जो सीधे मशीन की प्राकृतिक [[opcode|ओपकोडों]] में अनुवादित नहीं होते हैं अन्य सुविधाएँ, जैसे स्ट्रिंग हैंडलिंग रूटीन्स, ऑब्जेक्ट-ओरिएंटेड भाषा की विशेषताएँ, और फ़ाइल इनपुट/आउटपुट, उपस्थित भी हो सकती हैं। उच्च-स्तरीय प्रोग्रामिंग भाषाओं के बारे में एक बात यह है कि ये भाषाएँ प्रोग्रामर को मशीन से अलग और विभाजित होने की अनुमति देती हैं। अर्थात, उपस्थित स्थर जैसे कि असेंबली या मशीन भाषा की तरह, उच्च-स्तरीय प्रोग्रामिंग प्रोग्रामर के निर्देशों को वृद्धि दे सकती है और बगग्राउंड में उनकी जानकारी के बिना कई डेटा गतिविधियों को ट्रिगर कर सकती है। निर्देशों के प्रक्रियान्वयन की जिम्मेदारी और शक्ति प्रोग्रामर से मशीन को सौंप दी गई है।
  हाई-लेवल लैंग्वेज [[मशीन भाषा|मशीन लैंग्वेज]] मशीन लैंग्वेज से अधिक अवसरण के उच्च स्तर को सूचित करती है। यहां पर रजिस्टर, मेमोरी पतों, और कॉल स्टैक्स के साथ नहीं, हाई-लेवल लैंग्वेजएँ परिवर्तनीयों, सारणी, ऑब्जेक्ट्स, संशोधित अंशिक अंकगणित या बूल अभिव्यक्तियों, सबरूटीन्स और फ़ंक्शन्स, लूप्स, थ्रेड्स, लॉक्स, और अन्य अवसरण के सम्प्रेरणात्मक संज्ञान और अबस्ट्रैक्ट कंप्यूटर विज्ञान के अन्य अवसरणों के साथ व्यवहार करती हैं, जिसमें प्रोग्राम की दक्षता को महत्व दिया जाता है उपयोजनिम प्रोग्राम कुशलता के ऊपर। लो-लेवल असेंबलीलैंग्वेजो  की तरह, हाई-लेवललैंग्वेजो  में कुछ लैंग्वेज तत्व होते हैं, अगर कोई, जो सीधे मशीन की प्राकृतिक [[opcode|ओपकोडों]] में अनुवादित नहीं होते हैं अन्य सुविधाएँ, जैसे स्ट्रिंग हैंडलिंग रूटीन्स, ऑब्जेक्ट-ओरिएंटेड लैंग्वेज की विशेषताएँ, और फ़ाइल इनपुट/आउटपुट, उपस्थित भी हो सकती हैं। हाई-लेवल प्रोग्रामिंगलैंग्वेजो  के बारे में एक बात यह है कि ये लैंग्वेजएँ प्रोग्रामर को मशीन से अलग और विभाजित होने की अनुमति देती हैं। अर्थात, उपस्थित स्थर जैसे कि असेंबली या मशीन लैंग्वेज की तरह, हाई-लेवल प्रोग्रामिंग प्रोग्रामर के निर्देशों को वृद्धि दे सकती है और बगग्राउंड में उनकी जानकारी के बिना कई डेटा गतिविधियों को ट्रिगर कर सकती है। निर्देशों के प्रक्रियान्वयन की जिम्मेदारी और शक्ति प्रोग्रामर से मशीन को सौंप दी गई है।


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


उच्च-स्तरीय प्रोग्रामिंग अधिक सामान्य डेटा संरचनाओं और संचालन, रन-टाइम व्याख्या और मध्यवर्ती कोड फ़ाइलों जैसी सुविधाओं को प्रदर्शित करती है; जिसके परिणामस्वरूप प्रायः आवश्यकता से कहीं अधिक संचालन, उच्च मेमोरी खपत और बड़े बाइनरी प्रोग्राम आकार का निष्पादन होता है।<ref>{{cite journal
हाई-लेवल प्रोग्रामिंग अधिक सामान्य डेटा संरचनाओं और संचालन, रन-टाइम व्याख्या और मध्यवर्ती कोड फ़ाइलों जैसी सुविधाओं को प्रदर्शित करती है; जिसके परिणामस्वरूप प्रायः आवश्यकता से कहीं अधिक संचालन, उच्च मेमोरी खपत और बड़े बाइनरी प्रोग्राम आकार का निष्पादन होता है।<ref>{{cite journal
  |author=Surana P  
  |author=Surana P  
  |title=Meta-Compilation of Language Abstractions.  
  |title=Meta-Compilation of Language Abstractions.  
Line 39: Line 39:
   | pages = 367
   | pages = 367
   | publisher = Springer
   | publisher = Springer
   }}</ref> इस कारण से, कोड जिसे विशेष रूप से तेज़ी से और कुशलता से चलाने की आवश्यकता होती है, को निम्न-स्तरीय भाषा के उपयोग की आवश्यकता हो सकती है, भले ही उच्च-स्तरीय भाषा कोडिंग को सरल बना दे। कई स्थितियों में, उच्च-स्तरीय भाषा में प्रोग्राम के महत्वपूर्ण भाग को असेंबली भाषा में हाथ से कोडित किया जा सकता है, जिससे बहुत तेज़, अधिक कुशल, या बस विश्वसनीय रूप से कार्य करने वाला [[कार्यक्रम अनुकूलन]] होता है।   
   }}</ref> इस कारण से, कोड जिसे विशेष रूप से तेज़ी से और कुशलता से चलाने की आवश्यकता होती है, को लो-लेवल लैंग्वेज के उपयोग की आवश्यकता हो सकती है, भले ही हाई-लेवल लैंग्वेज कोडिंग को सरल बना दे। कई स्थितियों में, हाई-लेवल लैंग्वेज में प्रोग्राम के महत्वपूर्ण भाग को असेंबली लैंग्वेज में हाथ से कोडित किया जा सकता है, जिससे बहुत तेज़, अधिक कुशल, या विश्वसनीय रूप से कार्य करने वाला प्रोग्राम [[कार्यक्रम अनुकूलन|अनुकूलन]] होता है।   


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


== सापेक्ष अर्थ ==
== संबन्द्धित अर्थ ==
आजकल सक्रिय उपयोग में हाई-लेवल प्रोग्रामिंग भाषाओं की उदाहरण में [[पायथन (प्रोग्रामिंग भाषा)|पायथन]], [[जावास्क्रिप्ट]], [[विज़ुअल बेसिक]], [[डेल्फ़ी (प्रोग्रामिंग भाषा)|डेल्फ़ी]], [[पर्ल]], [[पीएचपी]], [[इकमास्क्रिप्ट]], [[रूबी (प्रोग्रामिंग भाषा)|रूबी]], [[सी शार्प (प्रोग्रामिंग भाषा)|सीशार्प]], [[जावा (प्रोग्रामिंग भाषा)|जावा]] और बहुत सी अन्य भाषाएँ हैं।ईसीएमएस्क्रिप्ट, [[रूबी (प्रोग्रामिंग भाषा)]], सी शार्प (प्रोग्रामिंग भाषा) शामिल हैं। सी#, जावा (प्रोग्रामिंग भाषा) और कई अन्य
आजकल सक्रिय उपयोग में हाई-लेवल प्रोग्रामिंगलैंग्वेजो  की उदाहरण में [[पायथन (प्रोग्रामिंग भाषा)|पायथन]], [[जावास्क्रिप्ट]], [[विज़ुअल बेसिक]], [[डेल्फ़ी (प्रोग्रामिंग भाषा)|डेल्फ़ी]], [[पर्ल]], [[पीएचपी]], [[इकमास्क्रिप्ट]], [[रूबी (प्रोग्रामिंग भाषा)|रूबी]], [[सी शार्प (प्रोग्रामिंग भाषा)|सीशार्प]], [[जावा (प्रोग्रामिंग भाषा)|जावा]] और बहुत सी अन्य लैंग्वेजएँ हैं। ईसीएमएस्क्रिप्ट, [[रूबी (प्रोग्रामिंग भाषा)|रूबी]], सी शार्प सम्मिलित हैं। सी, जावा और कई अन्य हाई-लेवल और लो-लेवल के शब्द स्वाभाविक रूप से परिस्थितिक होते हैं। कुछ दशक पहले, से और इसकी समान लैंग्वेज, प्रायः "हाई-लेवल" मानी जाती थीं, क्योंकि इसमें व्यक्ति विश्लेषण के सिद्धांत, पैमाने वाली पुनरावृत्तिमान फ़ंक्शनें, और डेटा प्रकार और संरचनाओं के समर्थन की गई थी, जबकि एसेम्बली लैंग्वेज को "निम्न-स्तर" माना जाता था। आजकल बहुत से प्रोग्रामर्स सी कोलो-लेवल के रूप में संदर्भित कर सकते हैं, क्योंकि इसमें एक बड़ा रनटाइम-सिस्टम नहीं होता है मूलत: स्केलर प्राक्रियाएँ होती हैं, और सी सीधे मेमोरी पतों की पता देने का समर्थन करता है; इसलिए यह सरलता से एसेम्बली लैंग्वेज और सीपीयूओं और माइक्रोकंट्रोलर्स के मशीन स्तर से मिलती जुलती है। इसके अतिरिक्त,के और आर की "सी प्रोग्रामिंग लैंग्वेज" के प्रस्तावना अध्याय में, सी को एक संबंधित रूप में लैंग्वेज के रूप में माना गया है।<ref>{{cite book|last1=Kernighan|first1=Brian W.|last2=Ritchie|first2=Dennis M.|date=1988|title=The C Programming Language: 2nd Edition|url=https://books.google.com/books?id=FGkPBQAAQBAJ|url-status=live|publisher=Prentice Hall|isbn=9780131103627|archive-url=https://archive.org/details/the_c_programming_language_2_20181213|archive-date=2018-12-13}}</ref>


''उच्च-स्तर'' और ''निम्न-स्तर'' के शब्द स्वाभाविक रूप से परिस्थितिक होते हैं। कुछ दशक पहले, सी (प्रोग्रामिंग भाषा), और इसकी समान भाषाएँ, अक्सर "उच्च-स्तर" मानी जाती थीं, क्योंकि इसमें व्यक्ति विश्लेषण के सिद्धांत, पैमाने वाली पुनरावृत्तिमान फ़ंक्शनें, और डेटा प्रकार और संरचनाओं के समर्थन की गई थी, जबकि एसेम्बली भाषा को "निम्न-स्तर" माना जाता था। आजकल बहुत से प्रोग्रामर्स सी को निम्न-स्तर के रूप में संदर्भित कर सकते हैं, क्योंकि इसमें एक बड़ा रनटाइम-सिस्टम नहीं होता है (कोई कचरा संग्रहण आदि नहीं), मूलत: स्केलर प्राक्रियाएँ होती हैं, और सी सीधे मेमोरी पतों की पता देने का समर्थन करता है; इसलिए यह आसानी से एसेम्बली भाषा और सीपीयूओं और माइक्रोकंट्रोलर्स के मशीन स्तर से मिलती जुलती है। इसके अलावा, K&R की "The C Programming Language" (second edition) के प्रस्तावना अध्याय में, सी को एक संबंधित रूप में "निम्न स्तर" भाषा के रूप में माना गया है।<ref>{{cite book|last1=Kernighan|first1=Brian W.|last2=Ritchie|first2=Dennis M.|date=1988|title=The C Programming Language: 2nd Edition|url=https://books.google.com/books?id=FGkPBQAAQBAJ|url-status=live|publisher=Prentice Hall|isbn=9780131103627|archive-url=https://archive.org/details/the_c_programming_language_2_20181213|archive-date=2018-12-13}}</ref>
एसेम्बली लैंग्वेज स्वयं एक हाई-लेवल  [[मशीन कोड]] की प्रतिनिधिता के रूप में मानी जा सकती है, क्योंकि इसमें स्थिरांक और अभिव्यक्तियों की समर्थना होती है, कभी-कभी चर तक, वर्चस्वर, और [[डेटा संरचना]] भी। [[मशीन कोड]], उसके बाद, कई प्रोसेसरों में आंतरिक रूप से उपयोग की जाने वाली [[माइक्रोकोड]] या [[माइक्रो-आपरेशन]] से थोड़े उच्च स्तर पर होता है।<ref>{{Cite book|title=The art of assembly language|last=Hyde, Randall.|date=2010|publisher=No Starch Press|isbn=9781593273019|edition= 2nd|location=San Francisco|oclc=635507601|url=https://books.google.com/books?id=sYHtTvQ-ObIC}}</ref>
एसेम्बली भाषा स्वयं एक उच्च-स्तर (लेकिन अक्सर [[मैक्रो (कंप्यूटर विज्ञान)|मैक्रो]] के बिना उपयोग किए हुए भी) [[मशीन कोड]] की प्रतिनिधिता के रूप में मानी जा सकती है, क्योंकि इसमें स्थिरांक और (सीमित) अभिव्यक्तियों की समर्थना होती है, कभी-कभी चर तक, वर्चस्वर, और [[डेटा संरचना]] भी। [[मशीन कोड]], उसके बाद, कई प्रोसेसरों में आंतरिक रूप से उपयोग की जाने वाली [[माइक्रोकोड]] या [[माइक्रो-आपरेशन]] से थोड़े उच्च स्तर पर होता है।<ref>{{Cite book|title=The art of assembly language|last=Hyde, Randall.|date=2010|publisher=No Starch Press|isbn=9781593273019|edition= 2nd|location=San Francisco|oclc=635507601|url=https://books.google.com/books?id=sYHtTvQ-ObIC}}</ref>


[[Category:CS1 errors]]
[[Category:CS1 errors]]
Line 61: Line 60:


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


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


=== [[उच्च स्तरीय भाषा कंप्यूटर वास्तुकला]] ===
=== [[उच्च स्तरीय भाषा कंप्यूटर वास्तुकला|हाई-लेवल लैंग्वेज कंप्यूटर आर्किटेक्चर]] ===
वैकल्पिक रूप से, उच्च-स्तरीय भाषा के लिए कंप्यूटर द्वारा सीधे कार्यान्वित किया जाना संभव है - कंप्यूटर सीधे एचएलएल कोड को निष्पादित करता है। इसे एक उच्च-स्तरीय भाषा [[कंप्यूटर आर्किटेक्चर]] के रूप में जाना जाता है - कंप्यूटर आर्किटेक्चर को विशिष्ट उच्च-स्तरीय भाषा द्वारा लक्षित करने के लिए डिज़ाइन किया गया है। उदाहरण के लिए, बरोज़ की बड़ी प्रणालियाँ  एलगोल  60 के लिए लक्षित मशीनें थीं।<ref>{{Citation|last=Chu|first=Yaohan|chapter=Concepts of High-Level Language Computer Architecture|date=1975|pages=1–14|publisher=Elsevier|isbn=9780121741501|doi=10.1016/b978-0-12-174150-1.50007-0|title=High-Level Language Computer Architecture}}</ref>
वैकल्पिक रूप से, हाई-लेवल लैंग्वेज के लिए कंप्यूटर द्वारा सीधे कार्यान्वित किया जाना संभव है - कंप्यूटर सीधे एचएलएल कोड को निष्पादित करता है। इसे एक हाई-लेवल लैंग्वेज [[कंप्यूटर आर्किटेक्चर]] के रूप में जाना जाता है - कंप्यूटर आर्किटेक्चर को विशिष्ट हाई-लेवल लैंग्वेज द्वारा लक्षित करने के लिए डिज़ाइन किया गया है। उदाहरण के लिए, बरोज़ की बड़ी प्रणालियाँ  एलगोल  60 के लिए लक्षित मशीनें थीं।<ref>{{Citation|last=Chu|first=Yaohan|chapter=Concepts of High-Level Language Computer Architecture|date=1975|pages=1–14|publisher=Elsevier|isbn=9780121741501|doi=10.1016/b978-0-12-174150-1.50007-0|title=High-Level Language Computer Architecture}}</ref>




== यह भी देखें ==
== यह भी देखें{{Portal|Computer programming}}==
{{Portal|Computer programming}}
* संक्षेपण
* अमूर्तता (कंप्यूटर विज्ञान)
* [[प्रोग्रामिंग भाषाओं की पीढ़ीगत सूची|प्रोग्रामिंगलैंग्वेजो की पीढ़ीगत सूची]]
* [[प्रोग्रामिंग भाषाओं की पीढ़ीगत सूची]]
* लो-लेवल प्रोग्रामिंग लैंग्वेजएँ
* निम्न-स्तरीय प्रोग्रामिंग भाषाएँ
* हाई-लेवल कोडांतरक
* उच्च स्तरीय कोडांतरक
* [[बहुत उच्च स्तरीय प्रोग्रामिंग भाषा|बहुत हाई-लेवल प्रोग्रामिंग लैंग्वेज]]एं
* [[बहुत उच्च स्तरीय प्रोग्रामिंग भाषा]]एं
* [[प्रोग्रामिंग भाषाओं की श्रेणीबद्ध सूची|प्रोग्रामिंगलैंग्वेजो की श्रेणीबद्ध सूची]]
* [[प्रोग्रामिंग भाषाओं की श्रेणीबद्ध सूची]]
{{Clear}}




Line 94: Line 91:


== बाहरी संबंध ==
== बाहरी संबंध ==
* http://c2.com/cgi/wiki?HighLevelLanguage - The [[WikiWikiWeb]]'s article on high-level programming languages
* http://c2.com/cgi/wiki?HighLevelLanguage - The [[WikiWikiWeb]]'s article on high-level programming language
 
{{Types of programming languages}}
{{Authority control}}


{{DEFAULTSORT:High-Level Programming Language}}[[Category: हाई-लेवल प्रोग्रामिंग लैंग्वेज | हाई-लेवल प्रोग्रामिंग लैंग्वेज ]] [[Category: प्रोग्रामिंग भाषा वर्गीकरण]]  
{{DEFAULTSORT:High-Level Programming Language}}[[Category: हाई-लेवल प्रोग्रामिंग लैंग्वेज | हाई-लेवल प्रोग्रामिंग लैंग्वेज ]] [[Category: प्रोग्रामिंग भाषा वर्गीकरण]]  
Line 105: Line 99:
[[Category: Machine Translated Page]]
[[Category: Machine Translated Page]]
[[Category:Created On 18/02/2023]]
[[Category:Created On 18/02/2023]]
[[Category:Vigyan Ready]]

Latest revision as of 07:08, 28 September 2023

कंप्यूटर विज्ञान में, हाई-लेवल प्रोग्रामिंग लैंग्वेज एक प्रोग्रामिंग लैंग्वेज है जो कंप्यूटर के विवरणों से मजबूत संक्षेपण रखती है। लो-लेवल प्रोग्रामिंग लैंग्वेजो के विपरीत में, यह प्राकृतिक लैंग्वेज तत्वों का उपयोग कर सकती है, संचालन में सरलता उत्पन्न कर सकती है, या यह कम्प्यूटिंग सिस्टमों के महत्वपूर्ण क्षेत्रों को स्वचालित कर सकती है जैसे कि मेमोरी प्रबंधन, जिससे प्रोग्राम विकसित करने की प्रक्रिया को एक लो-लेवल लैंग्वेज का उपयोग करते समय सरल और समझने योग्य बना दी जा सकती है। प्रदान की गई संक्षेपण की मात्रा परिभाषित करती है कि कितनी हाई-लेवल प्रोग्रामिंग लैंग्वेज होती है।[1]

1960 के दशक में, कंपाइलर का उपयोग करने वाली एक हाई-लेवल प्रोग्रामिंग लैंग्वेज को सामान्यतः ऑटोकोड कहा जाता था।[2]कोबोल और फोरट्रान ऑटोकोड के उदाहरण हैं।[3]कंप्यूटर के लिए डिज़ाइन की गई पहली हाई-लेवल प्रोग्रामिंग लैंग्वेज प्लैंकलकुल थी, जिसे कोनराड ज़्यूस द्वारा बनाया गया था।[4] यद्यपि, यह उनके समय में लागू नहीं किया गया था, और उनके मूल योगदान को द्वितीय विश्व युद्ध के कारण अन्य विकासों से काफी हद तक अलग कर दिया गया था, एक तरफ हेंज रूटिशॉसर द्वारा सुपरप्लान लैंग्वेज पर लैंग्वेज के प्रभाव से और कुछ सीमा तक एलगोल लैंग्वेज पर प्रभाव था। पहली उल्लेखनीय रूप से व्यापक हाई-लेवल लैंग्वेज फोरट्रान थी, जो आईबीएम के पहले के ऑटोकोड सिस्टम का एक मशीन-स्वतंत्र विकास था। एलगोल परिवार, एलगोल 58 के साथ 1958 में परिभाषित किया गया और एलगोल 60 1960 में यूरोपीय और अमेरिकी कंप्यूटर वैज्ञानिकों की समितियों द्वारा परिभाषित किया गया, जिसमें पुनरावर्तन के साथ-साथ नेस्टेड फ़ंक्शन को शाब्दिक विस्तार के अंतर्गत प्रस्तुत किया गया।

एलगोल 60 ने यह भी पहली लैंग्वेज थी जिसमें मूल्य और नाम-पैरामीटरों के बीच स्पष्ट भिन्नता थी और उनके संबंधित सेमैंटिक्स थी। एलगोल ने भी कई स्ट्रक्चर्ड प्रोग्रामिंग अवधारणाओं को प्रस्तुत किया, जैसे कि while-doऔरif-then-elseनिर्माण, और इसकी सिंटैक्स पहली बार औपचारिक नोटेशन में वर्णित की गई थी - बैकस-नौर फॉर्म (बीएनएफ) लगभग उसी समय, कोबोल ने रेकॉर्ड को प्रस्तुत किया और लिस्प ने पहली बार प्रोग्रामिंग लैंग्वेज में पूरी तरह से सामान्य लैम्ब्डा अमूर्त को प्रस्तुत किया।

सुविधाएँ

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

अब्स्ट्रैक्शन पेनल्टी

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

हाई-लेवल प्रोग्रामिंग अधिक सामान्य डेटा संरचनाओं और संचालन, रन-टाइम व्याख्या और मध्यवर्ती कोड फ़ाइलों जैसी सुविधाओं को प्रदर्शित करती है; जिसके परिणामस्वरूप प्रायः आवश्यकता से कहीं अधिक संचालन, उच्च मेमोरी खपत और बड़े बाइनरी प्रोग्राम आकार का निष्पादन होता है।[5][6][7] इस कारण से, कोड जिसे विशेष रूप से तेज़ी से और कुशलता से चलाने की आवश्यकता होती है, को लो-लेवल लैंग्वेज के उपयोग की आवश्यकता हो सकती है, भले ही हाई-लेवल लैंग्वेज कोडिंग को सरल बना दे। कई स्थितियों में, हाई-लेवल लैंग्वेज में प्रोग्राम के महत्वपूर्ण भाग को असेंबली लैंग्वेज में हाथ से कोडित किया जा सकता है, जिससे बहुत तेज़, अधिक कुशल, या विश्वसनीय रूप से कार्य करने वाला प्रोग्राम अनुकूलन होता है।

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

संबन्द्धित अर्थ

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

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

निष्पादन मोड

आधुनिक हाई-लेवल लैंग्वेजो के निष्पादन के तीन सामान्य नियम हैं:

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

ध्यान दें कि लैंग्वेजएँ सख्त रूप से इंटरप्रिटेड लैंग्वेजएँ या कॉम्पाइलेड लैंग्वेजएँ नहीं होतीं हैं। बल्कि, लैंग्वेज के व्यवहार की अनुसंधानों के लिए इंटरप्रिटिंग या कॉम्पाइलिंग का उपयोग किया जाता है। उदाहरण के लिए, एलगोल 60 और फोरट्रैन दोनों को इंटरप्रिट किया गया है । उसी तरह, जावा इन लेबलों कोलैंग्वेजो पर लागू करने की कठिनाई दिखाता है, इन्हें केवल इंप्लिमेंटेशन्स को नहीं,लैंग्वेजो पर लागू करने का प्रयास करने की कठिनाई को दर्शाता है; जावा को बाइटकोड में कॉम्पाइल किया जाता है जो फिर या तो इंटरप्रिट किया जाता है या कॉम्पाइल किया जाता है। इसके अतिरिक्त, कॉम्पाइलिंग, ट्रांसकॉम्पाइलिंग, और इंटरप्रिटिंग को केवल कंपाइलर आर्टिफैक्ट बाइनरी एक्जीक्यूटेबल या IL असेम्बली का विवरण नहीं माना जा सकता।

हाई-लेवल लैंग्वेज कंप्यूटर आर्किटेक्चर

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


यह भी देखें


टिप्पणियाँ


संदर्भ

  1. HThreads - RD Glossary
  2. London, Keith (1968). "4, Programming". Introduction to Computers. 24 Russell Square London WC1: Faber and Faber Limited. p. 184. ISBN 0571085938. The 'high' level programming languages are often called autocodes and the processor program, a compiler.{{cite book}}: CS1 maint: location (link)
  3. London, Keith (1968). "4, Programming". Introduction to Computers. 24 Russell Square London WC1: Faber and Faber Limited. p. 186. ISBN 0571085938. Two high level programming languages which can be used here as examples to illustrate the structure and purpose of autocodes are COBOL (Common Business Oriented Language) and FORTRAN (Formular Translation).{{cite book}}: CS1 maint: location (link)
  4. Giloi, Wolfgang, K. [de] (1997). "Konrad Zuse's Plankalkül: The First High-Level "non von Neumann" Programming Language". IEEE Annals of the History of Computing, vol. 19, no. 2, pp. 17–24, April–June, 1997. (abstract)
  5. Surana P (2006). "Meta-Compilation of Language Abstractions" (PDF). Archived (PDF) from the original on 2015-02-17. Retrieved 2008-03-17. {{cite journal}}: Cite journal requires |journal= (help)
  6. Kuketayev. "The Data Abstraction Penalty (DAP) Benchmark for Small Objects in Java". Archived from the original on 2009-01-11. Retrieved 2008-03-17.
  7. Chatzigeorgiou; Stephanides (2002). "Evaluating Performance and Power Of Object-Oriented Vs. Procedural Programming Languages". In Blieberger; Strohmeier (eds.). Proceedings - 7th International Conference on Reliable Software Technologies - Ada-Europe'2002. Springer. p. 367.
  8. Kernighan, Brian W.; Ritchie, Dennis M. (1988). The C Programming Language: 2nd Edition. Prentice Hall. ISBN 9780131103627. Archived from the original on 2018-12-13.
  9. Hyde, Randall. (2010). The art of assembly language (2nd ed.). San Francisco: No Starch Press. ISBN 9781593273019. OCLC 635507601.
  10. Chu, Yaohan (1975), "Concepts of High-Level Language Computer Architecture", High-Level Language Computer Architecture, Elsevier, pp. 1–14, doi:10.1016/b978-0-12-174150-1.50007-0, ISBN 9780121741501


बाहरी संबंध