यह पूछना बहुत पसंद है, "गणित के इतने क्षेत्र क्यों हैं? हमारे पास बीजगणित है, हमें ज्यामिति, पथरी और द्रव यांत्रिकी की आवश्यकता क्यों है?" प्रत्येक प्रोग्रामिंग भाषा का लक्ष्य किसी विशेष समस्या को हल करना है। एक से अधिक भाषा एक ही समस्या को हल करने में सक्षम हो सकती है, लेकिन प्रत्येक इसे अलग तरीके से देखेगा।
यहाँ प्रोग्रामिंग भाषाओं में कुछ प्रमुख अंतर हैं।
स्थायित्व और रखरखाव
कुछ भाषाओं को पढ़ना इंसान के लिए आसान होता है, जो एक प्रोग्रामर के लिए दूसरे प्रोग्रामर के कोड पर सहयोग करना आसान बनाता है। उदाहरण के लिए, पायथन में पढ़ने में आसान होने की प्रतिष्ठा है। यह अपने कोड ब्लॉक को परिभाषित करने के लिए लाइनों के सख्त इंडेंटेशन को लागू करता है, जिससे एक प्रोग्राम को देखना और इसकी संरचना का पता लगाना आसान हो जाता है। अन्य भाषाएं इंडेंटेशन की अनुमति देती हैं, लेकिन एक शैलीगत पसंद के रूप में, आवश्यकता के रूप में नहीं।
इसके विपरीत, पर्ल एक ऐसी भाषा है जो प्रोग्रामर को कई अलग-अलग तरीकों से एक ही प्रोग्राम लिखने की अनुमति देती है, लेकिन प्रोग्राम का उद्देश्य दूसरे पाठक को तुरंत स्पष्ट नहीं हो सकता है। ऐसा कार्यक्रम लिखना सुविधाजनक हो सकता है, लेकिन किसी और के लिए इसे समझना और संपादित करना मुश्किल है।
प्रदर्शन
कुछ भाषाओं की व्याख्या की जाती है, और कुछ को संकलित किया जाता है। कंप्यूटर द्वारा निष्पादित किए जाने से पहले एक संकलित प्रोग्राम को एक प्रीप्रोसेसर, कंपाइलर और लिंकर द्वारा संसाधित किया जाना चाहिए। यह विशेष मध्यवर्ती सॉफ्टवेयर लेक्सिकल विश्लेषण करता है, कार्यक्रम को मशीन भाषा में अनुवाद करता है। यह परिणामी निर्देशों को भी अनुकूलित कर सकता है, प्रोग्राम को तेज चलाने के लिए चतुर तरीकों की तलाश कर रहा है।
संकलित कार्यक्रम आमतौर पर व्याख्या किए गए कार्यक्रमों से बेहतर प्रदर्शन करते हैं। उदाहरण के लिए, C, C ++, और Objective-C ऐसी भाषाएँ हैं जो आमतौर पर बहुत तेज़ मशीन कोड के लिए संकलित होती हैं। सीपीयू के बाहर हर बिट प्रदर्शन को निचोड़ने के लिए, वीडियो गेम और सिस्टम सॉफ़्टवेयर अक्सर इन भाषाओं में लिखे जाते हैं।
दूसरी ओर, व्याख्या-भाषा के कार्यक्रम एक दुभाषिया नामक सॉफ्टवेयर द्वारा चलाए जाते हैं, जो प्रोग्राम के निर्देशों को पहले मशीन कोड में संकलित किए बिना निष्पादित करता है। हालांकि दुभाषिया कभी-कभी कार्यक्रम को एक मध्यवर्ती भाषा में पार्स करता है, जिसके परिणामस्वरूप कुछ अनुकूलन होता है, प्रदर्शन कभी भी मशीन कोड के रूप में तेज़ नहीं होता है।
व्याख्या की गई भाषाओं का एक प्रमुख लाभ इंटरैक्टिव विकास के लिए उनकी क्षमता है। क्योंकि पूरे कार्यक्रम को निष्पादित करने से पहले इसे संकलित करने की आवश्यकता नहीं है, कोड को अंतःक्रियात्मक रूप से चलाया जा सकता है। आप इससे परिचित हैं यदि आपने कभी अपने ऑपरेटिंग सिस्टम की कमांड लाइन का उपयोग किया है: तो आप एक कमांड दर्ज करते हैं और परिणाम देखते हैं। इस तरह के एक इंटरफेस को एक REPL, या "रीड-इवल-प्रिंट-लूप" कहा जाता है। REPL आपको व्यक्तिगत रूप से आदेशों (या आदेशों के ब्लॉक) को निष्पादित करने और परिणामों को देखने की अनुमति देता है। लिस्प, पर्ल, पायथन, नोडजेएस, रूबी, और जावास्क्रिप्ट व्याख्या की गई भाषाओं के उदाहरण हैं जिन्हें एक आरईपीएल में चलाया जा सकता है।
इंटरएक्टिव कमांड इंटरफेस, जैसे कि विंडोज कमांड प्रॉम्प्ट और बैश, भी व्याख्या की गई भाषाओं के रूप में योग्य हैं। इन "भाषाओं" के कार्यक्रमों को बैच फाइलें या शेल स्क्रिप्ट कहा जाता है।
विशिष्ट उपयोग के मामले
अक्सर, भाषाएं विशेष प्रकार के कार्यक्रमों को लिखने में विशेष रूप से अच्छी होती हैं। उदाहरण के लिए, NodeJS को वेब के लिए सिंगल-थ्रेडेड एप्लिकेशन लिखने के लिए डिज़ाइन किया गया है। इसकी गैर-अवरुद्ध फ़ाइल I / O प्रोग्राम को ऑपरेटिंग ("अवरुद्ध नहीं होना") जारी रखने की अनुमति देती है, जबकि वे आवश्यक डेटा के संचारित होने की प्रतीक्षा करते हैं।
एक अन्य उदाहरण आर प्रोग्रामिंग भाषा है, जो सांख्यिकीय विश्लेषण में माहिर है। आर में लिखे गए प्रोग्राम, बिल्ट-इन विश्लेषणात्मक परीक्षणों और मॉडलों से लाभान्वित होते हैं, और उपकरण कुशलतापूर्वक डेटा की भारी मात्रा में हेरफेर करते हैं।
प्रोटोटाइप में आसानी
कुछ भाषाएं तेजी से प्रोटोटाइप के लिए अनुमति देती हैं: प्रोग्रामर "बस लिखना शुरू कर सकता है, " और घटक पर घटक तब तक बना सकता है जब तक कि कार्यक्रम पूरी तरह से नहीं बनता है।
उदाहरण के लिए, Reddit वेबसाइट मूल रूप से लिस्प में लिखी गई थी। Reddit लॉन्च होने के बाद, पूरी साइट को कई कारणों से, तकनीकी और तार्किक दोनों के लिए अजगर में फिर से लिखा गया। यद्यपि सभी कोड को फिर से भरना एक प्रमुख उपक्रम था, लेकिन साइट के मालिकों ने कोई खेद नहीं व्यक्त किया। 2005 के एक ब्लॉग पोस्ट में, उन्होंने टिप्पणी की कि लिस्प ने उन्हें यह जानने के बिना कुछ बनाने की अनुमति दी कि यह क्या बन जाएगा।
उपलब्ध पुस्तकालय
आमतौर पर, जब आप एक नया प्रोग्रामिंग प्रोजेक्ट शुरू करते हैं, तो आप पहिया का फिर से आविष्कार नहीं करना चाहते हैं। यही है, आप एक वर्गमूल की गणना या एक स्ट्रिंग में एक चरित्र की पहली घटना को खोजने जैसे सामान्य कार्यों के लिए फ़ंक्शन लिखना नहीं चाहते हैं। इस कारण से, लगभग हर प्रोग्रामिंग भाषा सामान्य कार्यों के मानक पुस्तकालयों का एक सेट प्रदान करती है। प्रोग्रामर एक भाषा पसंद कर सकते हैं क्योंकि यह पुस्तकालयों द्वारा प्रदान करता है।
उदाहरण के लिए, C मानक लाइब्रेरी कई निम्न-स्तरीय सिस्टम संचालन के लिए अत्यधिक कार्यशील कार्य प्रदान करती है। पर्ल कई मजबूत लाइब्रेरी प्रदान करता है, और आपके प्रोग्राम में डाउनलोड और उपयोग किए जाने वाले मॉड्यूल के सीपीएएन रिपॉजिटरी भी। अजगर सूर्य के नीचे सब कुछ के लिए निर्मित कार्यों और मॉड्यूल की एक विस्तृत सरणी प्रदान करता है। क्लोवर, एक लिस्प जैसी भाषा जो जेवीएम पर चलती है, जावा ऑब्जेक्ट और विधियों के व्यापक मौजूदा पुस्तकालयों से कोड चलाने की अपनी क्षमता से लाभ उठाती है।
सुरक्षा
सभी भाषाएँ सुरक्षित कोड लिखने के लिए स्वयं को उधार नहीं देती हैं। सी प्रोग्रामिंग भाषा, उदाहरण के लिए, सुविधाओं (या इसके अभाव) के लिए कुख्यात है जो विनाशकारी कमजोरियों जैसे अशक्त सूचक डेरेफ़रिंग के लिए नेतृत्व कर सकती है। अन्य भाषाएं इन चिंताओं को कड़े नियमों से संबोधित करने का प्रयास करती हैं।
उदाहरण के लिए, कुछ भाषाएं विभिन्न प्रकार के डेटा पर क्या संचालन कर सकती हैं, इस पर प्रतिबंध लगाते हैं। इन भाषाओं में से सबसे कठिन कभी-कभी "दृढ़ता से टाइप किया जाता है" कहा जाता है, और वे प्रोग्रामर को मन की शांति प्रदान कर सकते हैं जो सॉफ्टवेयर विकास में सुरक्षा और स्थिरता को प्राथमिकता देते हैं। दृढ़ता से टाइप की जाने वाली भाषाओं के उदाहरणों में रस्ट, निम, ओकेमेल और हास्केल शामिल हैं।
भाषाएं "परिवर्तनशीलता" पर सीमाएं भी बदल सकती हैं, डेटा ऑब्जेक्ट की स्थिति को बदलने की क्षमता। उन वस्तुओं के बजाय जिनके मान अधिलेखित हैं, ये भाषाएं "अपरिवर्तनीय" वस्तुओं का पक्ष लेती हैं: स्मृति में मूल्य जिन्हें स्पष्ट अपवाद के बिना नहीं बदला जा सकता है। अपरिवर्तनीय वस्तुओं ने ब्याज को आकर्षित किया है क्योंकि मल्टी-कोर सीपीयू व्यापक रूप से फैल गए हैं, क्योंकि उनकी प्रवृत्ति "धागा सुरक्षा" को बढ़ावा देने की है। थ्रेड-सेफ प्रोग्राम में, एक से अधिक प्रोसेसर त्रुटि के बहुत कम जोखिम वाले डेटा के एक सेट पर काम कर सकते हैं। अपरिवर्तनीय वस्तुओं को प्राथमिकता देने वाली भाषाओं में रस्ट और क्लोजर शामिल हैं।
सामुदायिक समर्थन
एक नई भाषा में एक कार्यक्रम लिखते समय, यह डेवलपर्स के एक सक्रिय, भावुक समुदाय तक पहुंच बनाने में मदद करता है जो सक्रिय रूप से एक दूसरे के काम में उपयोग और योगदान करते हैं। प्रोग्रामिंग भाषा चुनने से पहले, उस भाषा के समुदाय के बारे में अधिक जानकारी प्राप्त करें। कुछ भाषाओं में एक रोमांचक, गतिशील, जीवंत उपयोगकर्ता आधार होता है जिसका आप हिस्सा बनना चाहते हैं और अन्य भाषाओं में बहुत कम या कोई समुदाय नहीं हो सकता है।
अभिव्यक्ति
प्रोग्राम लिखते समय, प्रोग्रामर के विचार और समस्या को सुलझाने की क्षमता उस भाषा के माध्यम से "बोल" रही है। नतीजतन, प्रोग्रामर उन भाषाओं को पसंद करते हैं जिनमें वे खुद को व्यक्त करने में सहज होते हैं। क्या एक भाषा और प्रोग्रामर एक साथ अच्छी तरह से काम करता है को परिभाषित करना कठिन है, हालांकि। अंततः, यह जानने का एकमात्र तरीका है कि आप किस भाषा के साथ सहज हैं, विभिन्न परियोजनाओं के लिए अलग-अलग भाषाओं का उपयोग करना और अपने लिए उनकी तुलना करना है।