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

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

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

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

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

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

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

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

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

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


 * स्रोत-से-स्रोत अनुवादित या ट्रांसकंपील्ड: किसी भाषा में लिखे गए कोड को निम्न-स्तरीय भाषा के संदर्भ में अनुवादित किया जा सकता है जिसके लिए मूल कोड कंपाइलर पहले से ही आम हैं। जावास्क्रिप्ट और भाषा सी (प्रोग्रामिंग भाषा) ऐसे अनुवादकों के लिए सामान्य लक्ष्य हैं। कॉफीस्क्रिप्ट, चिकन (योजना कार्यान्वयन) योजना, और एफिल (प्रोग्रामिंग भाषा) को उदाहरण के रूप में देखें। विशेष रूप से, जनरेट किया गया C और C++ कोड किसी भी संकलित एफिल प्रोजेक्ट की EIFGENs डायरेक्टरी में देखा जा सकता है (जैसा कि EiffelStudio IDE का उपयोग करते समय एफिल भाषा से उत्पन्न होता है)। एफिल में, अनुवादित प्रक्रिया को ट्रांसकंपाइलिंग या ट्रांसकंपील्ड कहा जाता है, और एफिल कंपाइलर को ट्रांसकंपाइलर या स्रोत से स्रोत संकलक कहा जाता है।

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

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

यह भी देखें

 * अमूर्तता (कंप्यूटर विज्ञान)
 * प्रोग्रामिंग भाषाओं की पीढ़ीगत सूची
 * निम्न-स्तरीय प्रोग्रामिंग भाषाएँ
 * उच्च स्तरीय कोडांतरक
 * बहुत उच्च स्तरीय प्रोग्रामिंग भाषाएं
 * प्रोग्रामिंग भाषाओं की श्रेणीबद्ध सूची

बाहरी संबंध

 * http://c2.com/cgi/wiki?HighLevelLanguage - The WikiWikiWeb's article on high-level programming languages