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

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

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

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

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

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

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

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

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

उच्च-स्तर और निम्न-स्तर के शब्द स्वाभाविक रूप से परिस्थितिक होते हैं। कुछ दशक पहले, सी (प्रोग्रामिंग भाषा), और इसकी समान भाषाएँ, अक्सर "उच्च-स्तर" मानी जाती थीं, क्योंकि इसमें व्यक्ति विश्लेषण के सिद्धांत, पैमाने वाली पुनरावृत्तिमान फ़ंक्शनें, और डेटा प्रकार और संरचनाओं के समर्थन की गई थी, जबकि एसेम्बली भाषा को "निम्न-स्तर" माना जाता था। आजकल बहुत से प्रोग्रामर्स सी को निम्न-स्तर के रूप में संदर्भित कर सकते हैं, क्योंकि इसमें एक बड़ा रनटाइम-सिस्टम नहीं होता है (कोई कचरा संग्रहण आदि नहीं), मूलत: स्केलर प्राक्रियाएँ होती हैं, और सी सीधे मेमोरी पतों की पता देने का समर्थन करता है; इसलिए यह आसानी से एसेम्बली भाषा और सीपीयूओं और माइक्रोकंट्रोलर्स के मशीन स्तर से मिलती जुलती है। इसके अलावा, K&R की "The C Programming Language" (second edition) के प्रस्तावना अध्याय में, सी को एक संबंधित रूप में "निम्न स्तर" भाषा के रूप में माना गया है। एसेम्बली भाषा स्वयं एक उच्च-स्तर (लेकिन अक्सर मैक्रो के बिना उपयोग किए हुए भी) मशीन कोड की प्रतिनिधिता के रूप में मानी जा सकती है, क्योंकि इसमें स्थिरांक और (सीमित) अभिव्यक्तियों की समर्थना होती है, कभी-कभी चर तक, वर्चस्वर, और डेटा संरचना भी। मशीन कोड, उसके बाद, कई प्रोसेसरों में आंतरिक रूप से उपयोग की जाने वाली माइक्रोकोड या माइक्रो-आपरेशन से थोड़े उच्च स्तर पर होता है।

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


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

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

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

यह भी देखें

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

बाहरी संबंध

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