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

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

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

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

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

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

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

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

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

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

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


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

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

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

यह भी देखें

 * संक्षेपण
 * प्रोग्रामिंगलैंग्वेजो की पीढ़ीगत सूची
 * लो-लेवल प्रोग्रामिंग लैंग्वेजएँ
 * हाई-लेवल कोडांतरक
 * बहुत हाई-लेवल प्रोग्रामिंग लैंग्वेजएं
 * प्रोग्रामिंगलैंग्वेजो की श्रेणीबद्ध सूची

बाहरी संबंध

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