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

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

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

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

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

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

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

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

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

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

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

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

उच्च-स्तर और निम्न-स्तर की शर्तें स्वाभाविक रूप से सापेक्ष हैं। कुछ दशक पहले, 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