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

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

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

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

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

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

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

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

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

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

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


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

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

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

यह भी देखें

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

बाहरी संबंध

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