सामान्य प्रयोजन प्रोग्रामिंग भाषा

कंप्यूटर सॉफ्टवेयर में, एक सामान्य-उद्देश्य प्रोग्रामिंग भाषा (जीपीएल) विभिन्न प्रकार के एप्लिकेशन डोमेन (सॉफ़्टवेयर इंजीनियरिंग) में सॉफ़्टवेयर बनाने के लिए एक प्रोग्रामिंग भाषा है। इसके विपरीत, एक विशिष्ट क्षेत्र के भीतर एक डोमेन-विशिष्ट प्रोग्रामिंग भाषा (DSL) का उपयोग किया जाता है। उदाहरण के लिए, पायथन (प्रोग्रामिंग भाषा) एक GPL है, जबकि SQL क्वेरी भाषा के लिए एक DSL है।

इतिहास
प्रारंभिक प्रोग्रामिंग भाषाओं को या तो वैज्ञानिक कंप्यूटिंग (संख्यात्मक गणना) या व्यावसायिक डेटा प्रोसेसिंग के लिए डिज़ाइन किया गया था, जैसा कि कंप्यूटर हार्डवेयर था। फोरट्रान और एएलजीओएल जैसी वैज्ञानिक भाषाएँ फ़्लोटिंग-पॉइंट गणनाओं और बहुआयामी सरणियों का समर्थन करती हैं, जबकि व्यावसायिक भाषाएँ जैसे COBOL फिक्स्ड-फ़ील्ड फ़ाइल स्वरूपों और रिकॉर्ड (कंप्यूटर विज्ञान) का समर्थन करती हैं। सूची के लिए आईपीएल-वी और एलआईएसपी (अमूर्त डेटा प्रकार) जैसी विशिष्ट भाषाएं बहुत कम व्यापक रूप से इस्तेमाल की गईं; स्ट्रिंग हेरफेर के लिए COMIT; संख्यात्मक नियंत्रण के लिए एपीटी (प्रोग्रामिंग भाषा)। सूचक (कंप्यूटर प्रोग्रामिंग)  की आवश्यकता वाली सिस्टम प्रोग्रामिंग आम तौर पर असेंबली भाषा में की जाती थी, हालांकि कुछ सैन्य अनुप्रयोगों के लिए JOVIAL का उपयोग किया जाता था। IBM का IBM System/360|System/360, जिसकी घोषणा 1964 में की गई थी, को एक एकीकृत हार्डवेयर आर्किटेक्चर के रूप में डिज़ाइन किया गया था जो वैज्ञानिक और व्यावसायिक दोनों अनुप्रयोगों का समर्थन करता है, और IBM ने इसके लिए PL/I को एक एकल, सामान्य-उद्देश्य वाली भाषा के रूप में विकसित किया जो वैज्ञानिक, वाणिज्यिक, और सिस्टम प्रोग्रामिंग। वास्तव में, PL/I के एक उपसमुच्चय का उपयोग मॉलटिक्स  ऑपरेटिंग सिस्टम के लिए मानक सिस्टम प्रोग्रामिंग भाषा के रूप में किया गया था।

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

1960 के दशक की शुरुआत में कई विशिष्ट भाषाएं भी विकसित की गईं: असतत घटना अनुकरण के लिए जीपीएसएस और सिमुला; प्रोग्रामिंग सिखाने के लिए MAD (प्रोग्रामिंग लैंग्वेज), बुनियादी,  लोगो (प्रोग्रामिंग भाषा) , और  पास्कल (प्रोग्रामिंग भाषा) ; सी (प्रोग्रामिंग भाषा) सिस्टम प्रोग्रामिंग के लिए; इंटरैक्टिव प्रोग्रामिंग के लिए JOSS और APL\360।

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

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

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

2010 में एक अनुभवजन्य अध्ययन ने GPL (C＃ (प्रोग्रामिंग लैंग्वेज)|C#) से परिचित और DSL (एक्स्टेंसिबल एप्लिकेशन मार्कअप लैंग्वेज) से अपरिचित उपयोगकर्ताओं की समस्याएं देकर GPL और DSL के बीच समस्या-समाधान और उत्पादकता को मापने की मांग की। अंततः, इस विशिष्ट डोमेन-विशिष्ट भाषा के उपयोगकर्ताओं ने 15% के कारक से बेहतर प्रदर्शन किया, भले ही वे जीपीएल से अधिक परिचित थे, आगे के शोध की आवश्यकता थी।

सी (प्रोग्रामिंग भाषा)
C (प्रोग्रामिंग लैंग्वेज), B (प्रोग्रामिंग लैंग्वेज) के पूर्ववर्ती को बड़े पैमाने पर एक विशिष्ट उद्देश्य के लिए विकसित किया गया था: सिस्टम प्रोग्रामिंग। इसके विपरीत, सी ने विभिन्न कम्प्यूटेशनल डोमेन जैसे ऑपरेटिंग सिस्टम, डिवाइस ड्राइवर, अनुप्रयोग प्रक्रिया सामग्री और अंतः स्थापित प्रणाली  में उपयोग पाया है।

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

सी ++
C (प्रोग्रामिंग लैंग्वेज) के विस्तार के रूप में अवधारित, C++ ने ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग |ऑब्जेक्ट-ओरिएंटेड सुविधाओं के साथ-साथ संदर्भ, ऑपरेटर ओवरलोडिंग और डिफ़ॉल्ट तर्क जैसी अन्य सुविधाएं पेश कीं। C (प्रोग्रामिंग लैंग्वेज) की तरह, C++|C++ की व्यापकता ने इसे व्यापक क्षेत्रों में उपयोग करने की अनुमति दी। जबकि इसका C++ का मुख्य क्षेत्र सिस्टम प्रोग्रामिंग में है (क्योंकि निम्न-स्तरीय आर्किटेक्चर तक पहुंच प्रदान करने की C++ की क्षमता के कारण), डेस्कटॉप एप्लिकेशन, वीडियो गेम, डेटाबेस, वित्तीय प्रणाली और बहुत कुछ बनाने के लिए इसका बड़े पैमाने पर उपयोग किया गया है। Microsoft, Apple Inc., Bloomberg L.P., और Morgan Stanley जैसी प्रमुख सॉफ्टवेयर और वित्त कंपनियाँ अभी भी अपने आंतरिक और बाह्य अनुप्रयोगों में व्यापक रूप से C++ का उपयोग करती हैं।

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

नीचे कुछ ऐसे क्षेत्र हैं जहाँ Python का उपयोग किया जाता है:
 * वेब डेवलपमेंट: Django (वेब ​​फ्रेमवर्क) और फ्लास्क (वेब ​​फ्रेमवर्क) जैसे फ्रेमवर्क ने वेब डेवलपर्स को मजबूत वेब सर्वर बनाने की अनुमति दी है जो व्यापक पायथन पारिस्थितिकी तंत्र का लाभ उठा सकते हैं।
 * विज्ञान और शिक्षा: SciPy और पांडा (सॉफ्टवेयर) जैसे वैज्ञानिक और डेटा पुस्तकालयों ने वैज्ञानिक अनुसंधान में पायथन के उपयोग को सक्षम किया है।
 * मशीन लर्निंग: scikit-सीखें और टेंसरफ्लो जैसी लाइब्रेरी ने डेवलपर्स के लिए मशीन लर्निंग की पहुंच बढ़ा दी है।
 * सामान्य सॉफ़्टवेयर विकास: उपयोगकर्ता एप्लिकेशन, वेब स्क्रैपिंग प्रोग्राम, गेम और अन्य सामान्य सॉफ़्टवेयर विकसित करना।

सूची
निम्नलिखित कुछ सामान्य-उद्देश्य वाली प्रोग्रामिंग भाषाएँ हैं:


 * सी (प्रोग्रामिंग भाषा)
 * सी ++
 * सी शार्प (प्रोग्रामिंग भाषा)|सी#
 * क्लोजर
 * क्रिस्टल (प्रोग्रामिंग भाषा)
 * डी (प्रोग्रामिंग भाषा)
 * डार्ट (प्रोग्रामिंग भाषा)
 * डेल्फी (सॉफ्टवेयर)
 * अमृत (प्रोग्रामिंग भाषा)
 * एरलांग (प्रोग्रामिंग भाषा)
 * एफ शार्प (प्रोग्रामिंग भाषा)|एफ#
 * जाओ (प्रोग्रामिंग भाषा)
 * हार्बर कंपाइलर
 * हास्केल (प्रोग्रामिंग भाषा)
 * जावा (प्रोग्रामिंग भाषा)
 * जावास्क्रिप्ट (प्रोग्रामिंग भाषा)
 * जूलिया (प्रोग्रामिंग भाषा)
 * कोटलिन (प्रोग्रामिंग भाषा)
 * लुआ (प्रोग्रामिंग भाषा)
 * मॉड्यूल-2
 * ओबेरॉन (प्रोग्रामिंग भाषा)
 * उद्देश्य सी
 * OCaml
 * पर्ल
 * पीएचपी
 * पाईक (प्रोग्रामिंग भाषा)
 * पीएल/आई
 * पायथन (प्रोग्रामिंग भाषा)
 * रैकेट (प्रोग्रामिंग भाषा)
 * रूबी (प्रोग्रामिंग भाषा)
 * जंग (प्रोग्रामिंग भाषा)
 * स्काला (प्रोग्रामिंग भाषा)
 * स्विफ्ट (प्रोग्रामिंग भाषा)
 * टीसीएल
 * मूल दृश्य
 * विजुअल बेसिक .NET
 * ज़िग (प्रोग्रामिंग भाषा)

यह भी देखें

 * सामान्य प्रयोजन मार्कअप भाषा
 * सामान्य प्रयोजन मॉडलिंग भाषा

श्रेणी:प्रोग्रामिंग भाषाएँ