एक उत्पाद या सॉफ्टवेयर के टुकड़े के विकास में कई प्रोग्रामिंग भाषाओं का उपयोग क्यों किया जाता है?


114

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

मैं उस आवश्यकता को समझना चाहता हूं जो उद्यमों को कई प्रोग्रामिंग भाषाओं का उपयोग करने के लिए प्रेरित करती है। सॉफ्टवेयर आर्किटेक्ट या प्रोजेक्ट लीड का कहना है कि किस तरह की आवश्यकता या प्रकार की आवश्यकता है, "मैं प्रस्ताव कर रहा हूं कि हम कार्य 1 के लिए भाषा X और भाषा 2 के लिए Y का उपयोग करें"? मैं इस कारण को समझ नहीं पा रहा हूं कि एक ही उत्पाद या सॉफ़्टवेयर में कई प्रोग्रामिंग भाषाओं का उपयोग क्यों किया जाता है।


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

16
@tonysdg: मैं कहूंगा कि "शुद्धता" शिक्षा में अधिक प्रासंगिक है, कम नहीं। क्या आम तौर पर प्रासंगिक नहीं है स्थिरता, उपयोगकर्ता अनुभव और / या प्रलेखन है। विशेष रूप से भाषाओं को मिलाकर बनाए रखने से प्रभावित होती है; यह योग्य अनुरक्षकों की संख्या को प्रतिबंधित करता है।
एमएसल्टर्स

2
@MSalters: मेनटेबिलिटी वह शब्द है जो मुझे लगता है कि मैं उस समय की तलाश में था --- मैं आपके लिखे हर बात से सहमत हूँ!
टनसडग

19
विभिन्न कार्यों के लिए विभिन्न उपकरण। आप देखेंगे कि भवन निर्माता और इंजीनियर एक घर बनाने के लिए विभिन्न उपकरणों का उपयोग करते हैं।
पॉल डी। वेट

17
जब आप छुट्टी पर जाते हैं, तो अपने घर से हवाई अड्डे तक और फिर विदेशी हवाई अड्डे पर फिर होटल से समुद्र तट तक, क्या आप यात्रा के प्रत्येक चरण के लिए परिवहन के समान मोड का उपयोग करते हैं?
ऑर्बिट

जवाबों:


17

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

छह मुख्य कारणों से कई भाषाओं का उपयोग करके परियोजनाएं समाप्त होती हैं:

  1. अन्य भाषाओं में लिखे गए पुन: उपयोग कोड की लागत लाभ;
  2. विरासत कोड को शामिल करने और समायोजित करने की आवश्यकता;
  3. विशिष्ट भाषाओं के लिए कोडर्स की उपलब्धता;
  4. विशेष आवश्यकताओं के लिए विशेष भाषाओं की आवश्यकता;
  5. विरासत भाषा के आधार; तथा
  6. खराब परियोजना प्रबंधन (अनियोजित बहु भाषा उपयोग)।

कारण 1-4 इस मायने में सकारात्मक कारण हैं कि उन्हें सीधे संबोधित करने से एक परियोजना को तेजी से समाप्त करने में मदद मिल सकती है, अधिक कुशलता से, उच्च गुणवत्ता वाले उत्पाद के साथ, और आसान दीर्घकालिक समर्थन के साथ। कारण 5 और 6 नकारात्मक हैं, आवश्यक परिवर्तन के प्रतिरोध के लक्षण, खराब योजना, अप्रभावी प्रबंधन या इन सभी कारकों के कुछ संयोजन। दुर्भाग्य से ये नकारात्मक कारक "आकस्मिक" बहु भाषा उपयोग के सामान्य कारण हैं।

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

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

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

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

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

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

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

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

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

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

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

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

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

एक नई भाषा में विरासत भाषा कर्मचारियों को प्रशिक्षित करना अपने आप में एक खतरा हो सकता है। मुझे अभी भी एक मामला याद है, जहां एक परियोजना का एक सदस्य जिसे अभी-अभी प्रशिक्षित किया गया था और सी से सी + + से संक्रमित किया गया था, ने मुझे पूरी ईमानदारी से शिकायत की कि वह सिर्फ ऑब्जेक्ट-ओरिएंटेड तरीकों के फायदे को नहीं समझता था। जब मैंने उनके कोड को देखा, तो उन्होंने अपने पहले के 103 सी फंक्शंस को सिंगल सी ++ ऑब्जेक्ट क्लास के लिए 103 तरीकों में बदल दिया था ... और ठीक से यह नहीं देखा कि कैसे कुछ भी मदद की।

गहरा संदेश यह है कि जब लोगों ने वर्षों या दशकों तक एक ही भाषा और भाषा शैली में प्रोग्राम किया है, तो नए तरीकों से उन्हें "सोचने" में लाने में कठिनाई लगभग अच्छी हो सकती है, यहां तक ​​कि अच्छे प्रशिक्षण कार्यक्रम भी। कुछ मामलों में कोई दूसरा विकल्प नहीं हो सकता है, लेकिन उन युवा डिजाइनरों और प्रोग्रामरों को लाया जा सकता है जो वर्तमान रुझानों और तरीकों के साथ अधिक हैं।

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


मैं इससे बिल्कुल सहमत हूं। हालांकि बासील का जवाब प्रदर्शन और स्पष्टता के मुद्दों पर प्रमुखता से केंद्रित है, आपका जवाब किसी को भी पॉलीग्लॉट प्रोग्रामिंग को चुनने के पीछे प्रबंधन के दृष्टिकोण को समझने में मदद करता है।
पार्थ पटेल

@ParPPatel मुझे लगता है कि आपको इस उत्तर को स्वीकार करना चाहिए, यह सबसे अच्छा आत्म-सम्‍मिलित रैप है।

2
+1: लेकिन आप अहंकार को भूल गए। बहुत से लोग नई भाषाएँ सीखने से इंकार करते हैं और जो जानते हैं उससे चिपके रहते हैं। कई टीमों के साथ परिपक्वता के इस अलग स्तर से एक ही परियोजना पर कई अलग-अलग प्रौद्योगिकी हो सकती हैं
डेवो

1
कारण 7, आईटी विभाग को भर्ती उद्देश्यों के लिए सेक्सी दिखने की कोशिश कर रहा है। .Net परियोजना पर कोई मजाक नहीं, हमने एक मौजूदा सेवा से एक एकल समापन बिंदु को बदलने के लिए समाप्त कर दिया, गो में एक पूरी नई सेवा का उपयोग करने के लिए, बस इसलिए वे नौकरी के ऐड में "पॉलीग्लॉट" डाल सकते थे!
क्रिस ली

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

158

मैं इस कारण को समझ नहीं पा रहा हूं कि एक ही उत्पाद या सॉफ़्टवेयर में कई प्रोग्रामिंग भाषाओं का उपयोग क्यों किया जाता है?

यह काफी सरल है: सभी जरूरतों और लक्ष्यों के लिए उपयुक्त एक भी प्रोग्रामिंग भाषा नहीं है।

माइकल एल स्कॉट की पुस्तक प्रोग्रामिंग लैंग्वेज प्रैग्मेटिक्स पढ़ें

कुछ प्रोग्रामिंग लैंग्वेज अभिव्यक्तता और डिक्लेरेशनिटी (बहुत सारी स्क्रिप्टिंग लैंग्वेज, लेकिन साथ ही उच्च स्तरीय प्रोग्रामिंग लैंग्वेज जैसे Agda , Prolog , Lisp , Haskell, Ocaml, ...) का पक्ष लेती हैं। जब विकास की लागत महत्वपूर्ण होती है (डेवलपर्स का मानव समय और लागत), तो उनका उपयोग करने के लिए उपयुक्त है (भले ही रनटाइम प्रदर्शन इष्टतम न हो)।

अन्य प्रोग्रामिंग भाषाएं रन-टाइम प्रदर्शन (कई निम्न-स्तरीय भाषाएं, आमतौर पर संकलित कार्यान्वयन की तरह, जैसे C ++, Rust, Go, C, कोडांतरक, भी OpenCL जैसी विशेष भाषाएं ...); अक्सर उनके विनिर्देश कुछ अपरिभाषित व्यवहार की अनुमति देते हैं । जब कोड का प्रदर्शन मायने रखता है, तो इन भाषाओं का उपयोग करना बेहतर होता है।

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

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

नोट: हालाँकि, प्रोग्रामिंग भाषाओं में कुछ धीमी प्रगति हुई है: जंग C या शायद C ++ की तुलना में अधिक अभिव्यंजक है, लेकिन इसका कार्यान्वयन लगभग निष्पादनकर्ता के रूप में है, और शायद समान रूप से तेज़ निष्पादन उत्पन्न करने के लिए सुधार होगा। इसलिए आपको अपने पेशेवर जीवन के दौरान नई प्रोग्रामिंग भाषाओं को सीखने की जरूरत है; हालांकि सिल्वर बुलेट नहीं है

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

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

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

कुछ मामलों में, आपको कई प्रोग्रामिंग भाषाओं को मिलाना होगा: वेब एप्लिकेशन को ब्राउज़र में चलने वाले भाग के लिए जावास्क्रिप्ट (वेबसेम्पर्स (केवल अधिकांश वेब ब्राउज़र के अंदर चलने वाली एकमात्र भाषा) की आवश्यकता होती है ( इन्हें बनाने वाले फ्रेमवर्क होते हैं , जैसे ocsigen )। कर्नेल कोड कुछ सामान की जरूरत है (उदाहरण के लिए अनुसूचक, या बीच में आता है के निम्न स्तर हैंडलिंग) आंशिक रूप से, कोडांतरक में लिखे जाने की वजह से सी या सी ++ व्यक्त नहीं कर सकते वहाँ क्या जरूरत है, आरडीबीएमएस प्रश्नों एसक्यूएल का उपयोग करना चाहिए, GPGPU रों जरूरत कंप्यूटर कर्नेल में कोडित OpenCL या CUDA C या C ++ होस्ट कोड आदि द्वारा प्रबंधित किया जाता है .... कुछ भाषाओं को इस तरह के मिश्रण की सुविधा के लिए बनाया गया है (जैसे C में asmकथन)मेरी देर GCC MELT , आदि में कोड विखंडन ...)।

कुछ मामलों में, आप मेटाप्रोग्रामिंग तकनीकों का उपयोग करते हैं: आपके बड़े सॉफ़्टवेयर प्रोजेक्ट के कुछ हिस्सों में कोड (जैसे C या C ++) में कुछ अन्य-हॉक औपचारिकता से अन्य उपकरण (शायद प्रोजेक्ट विशिष्ट उपकरण) द्वारा उत्पन्न होता है: पार्सर जनरेटर (अनुचित रूप से संकलक कहलाता है) संकलक) जैसे बायसन या ANTLR दिमाग में आते हैं, बल्कि SWIG या RPCGEN भी होते हैं। और ध्यान दें कि जीसीसी के पास एक दर्जन से अधिक विशिष्ट सी ++ कोड जनरेटर (जीसीसी के अंदर प्रत्येक आंतरिक डीएसएल के लिए एक) है। इसका उदाहरण भी देखें । ध्यान दें कि मेटाबग्स को ढूंढना मुश्किल है। बूटस्ट्रैपिंग कम्पाइलर के बारे में भी पढ़ें , और होमोसेक्सुअलिटी और प्रतिबिंब के बारे में(यह सार्थक सीखना है लिस्प , के साथ खेलने SBCL , और पढ़ने के लिए SICP ; में भी देखने JIT-संकलन की तरह पुस्तकालयों GCCJIT ; बारे में पता होना, कुछ बड़े कार्यक्रमों में आप उन्हें प्रयोग कार्यावधि में कुछ कोड उत्पन्न हो सकता है Greenspun के दसवें नियम )। FOSDEM2018 में सर्किट कम यात्रा की बात भी देखें।

कभी-कभी, आप कुछ विशेष एनोटेशन लैंग्वेज (जिसे कुछ डीएसएल के रूप में देखा जा सकता है) का उपयोग करके अपने कोड के औपचारिक एनोटेशन प्रदान करना चाहते हैं (जैसे कि उत्तेजक, स्थैतिक विश्लेषक, संकलनकर्ता की मदद करना)। सी- प्रोग्राम (सुरक्षा-महत्वपूर्ण वाले), या HPC के लिए OpenMP प्रचार के लिए Frama -C के साथ ACSL में देखें । कैविएट: इस तरह के एनोटेशन को लिखने के लिए बहुत सारे कौशल और विकास समय की आवश्यकता होती है।

BTW, यह बताता है कि संकलक और दुभाषियों के बारे में कुछ कौशल हर डेवलपर के लिए उपयोगी हैं (यहां तक ​​कि संकलक के अंदर काम किए बिना)। तो पढ़ ड्रैगन बुक भले ही आप compilers पर काम नहीं करते। यदि आप अपने स्वयं के दुभाषिया को कोड करते हैं (या यदि आप अपने डीएसएल को डिज़ाइन करते हैं), तो लिस्प इन स्माल पीस भी पढ़ें ।

यह भी देखें इस और है कि और है कि और है कि आपके प्रश्न से संबंधित मेरा जवाब।

प्रेरणा और ज्ञान के लिए कई बड़ी मुफ्त सॉफ्टवेयर परियोजनाओं के स्रोत कोड ( जीथब पर या अपने लिनक्स वितरण से ) का भी अध्ययन करें

इसके अलावा, कुछ प्रोग्रामिंग भाषाएं मौजूदा भाषाओं में एनोटेशन (प्रैग्मस या कमेंट्स के रूप में ) जोड़कर विकसित हुई हैं। उदाहरण के लिए, ACSL के बारे में सोचें ( Frama -C द्वारा अपने साक्ष्यों को सक्षम करने के लिए C प्रोग्रामों को एनोटेट करने के लिए एक टिप्पणी-विस्तार ) या OpenCL (GPGPUs के लिए एक सी बोली) या OpenMP या OpenACC #pragmas या कॉमन लिस्प के प्रकार एनोटेशन

पुनश्च: प्रोग्रामिंग भाषाओं को मिश्रित करने के लिए सामाजिक या संगठनात्मक या ऐतिहासिक कारण भी हैं; मैं उन्हें यहाँ अनदेखा कर रहा हूँ, लेकिन मुझे पता है कि व्यवहार में ऐसे कारण प्रमुख हैं। द मैथिकल मैन मंथ भी पढ़ें


6
मेरे लिए, यह सही उत्तर है। आप उदाहरण के लिए C प्रोग्राम में असेंबली रूटीन ले सकते हैं। UNIX शेल कई प्रोग्रामिंग भाषाओं के साथ लिट गया है, और आप अक्सर पाएंगे awk(जो कि एक अन्य प्रोग्रामिंग भाषा है) का उपयोग बैश स्क्रिप्ट के भीतर किया गया है, सिर्फ इसलिए कि यह कार्य के लिए बेहतर फिट है)। @ अमन की बात अब भी कायम है।
MayeulC

8
BTW, एक महान प्रोग्रामर कभी-कभी कोड की पंक्तियों को हटाने में सक्षम होता है ... (बहुत कम लाइनों के साथ बहुत भद्दे कोड लाइनों की जगह)
बासीले स्टायरेंविच

12
महान जवाब, लेकिन एक अनुरोध: मैं उन्हें "प्रमुखता" से कम प्रमुखता से पेश करने की इच्छा की सराहना करता हूं, लेकिन कृपया HTML SUP टैग का दुरुपयोग न करें क्योंकि इसमें छोटे फ़ॉन्ट में रेंडरिंग का साइड-इफेक्ट है। यह एक सुगमता दुःस्वप्न बन गया है, और जैसा कि एचटीएमएल 5 मानक कहता है, "इन तत्वों का उपयोग केवल विशिष्ट अर्थों के साथ टाइपोग्राफिक सम्मेलनों को चिह्नित करने के लिए किया जाना चाहिए, प्रस्तुति की खातिर टाइपोग्राफिक प्रस्तुति के लिए नहीं। [...] केवल इन तत्वों का उपयोग करें। उन तत्वों की अनुपस्थिति से सामग्री का अर्थ बदल जाएगा। ”
FeRD

4
@FeRD: हटा दिया गया, <sup>लेकिन पछतावे के साथ
बेसिल स्टायरेंविच

6
@BasileStarynkevitch की सराहना की। जैसा कि मैंने कहा, मैं इरादे की सराहना करता हूं, और एक अति-क्रिया के रूप में, स्वयं-प्रवण-मूर्त लेखक के रूप में, मैं निश्चित रूप से चाहता हूं कि स्टैकएक्सचेंज ने स्टाइलिंग पाठ की एक समर्थित विधि प्रदान की है, या शायद एक क्लिक-टू-रीव्यू कंटेनर के भीतर ढह गई है। लेकिन पैराग्राफ-लंबाई के सुपरस्क्रिप्ट उस कमी का जवाब नहीं है।
FeRD

29

कई प्रोजेक्ट कई प्रोग्रामिंग भाषाओं के साथ नहीं बने हैं। हालाँकि, सॉफ्टवेयर की सहायता के लिए अन्य भाषाओं में लिपियों का उपयोग करना आम है।

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

कुछ परियोजनाएँ अनुप्रयोग के भीतर कई भाषाओं का उपयोग करती हैं, जैसे निचले स्तर की भाषा में एक कोर जो स्क्रिप्टिंग भाषा में प्लगइन्स को एकीकृत कर सकती है। कुछ पारिस्थितिक तंत्रों (जैसे JVM या .NET) में उपयोग की जाने वाली सटीक भाषा बहुत महत्वपूर्ण नहीं है क्योंकि एक ही भाषा रनटाइम पर कई भाषाओं में अच्छी इंटरऑपरेबिलिटी होती है। उदाहरण के लिए, मैं स्काला में एक परियोजना लिख ​​सकता हूं जो मौजूदा जावा पुस्तकालयों का उपयोग करता है, और ग्रूवी के साथ स्क्रिप्टिंग कार्यक्षमता को एकीकृत करता है।

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


3
यह @ बेसिल के उत्तर का पूरक है। लिनक्स कर्नेल से पर्ल स्क्रिप्ट कर्नेल का हिस्सा नहीं है, न ही मेकफाइल है। इनके लिए C का उपयोग करने से कोई लाभ नहीं है। इसके अलावा, उन पर्ल लिपियों का उपयोग लिनक्स कर्नेल के स्वतंत्र रूप से किया जा सकता है। अक्सर, उन लोगों को एक बारीकी से संबंधित परियोजना के रूप में सोचा जा सकता है, फिर भी अलग-अलग । आप आमतौर पर किसी एक कार्य के लिए एक ही भाषा का उपयोग करेंगे।
मेयूलक

20

इसके दो रूप हैं, और बहुत सारे संगठन जो दोनों के बीच में आते हैं:

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

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

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


20

मैं एक उदाहरण में योगदान कर सकता हूं, एक प्रोग्रामिंग प्रोजेक्ट जो 32 वर्षों से चल रहा है, और प्रतीत होता है कि इसमें अभी भी बहुत सारे जीवन शेष हैं। यह ओपन-सोर्स के बजाय कमर्शियल है।

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

इसका एक ऐड-ऑन है, जो C ++ में लिखा गया है, जिसे तब शुरू किया गया था जब परियोजना का एक पिछला प्रमुख आश्वस्त हो गया था कि C ++ / MFC / Windows / x86 अन्य सभी आर्किटेक्चर और प्लेटफार्मों को विस्थापित करने जा रहा है, इसलिए C ++ काम की पेशकश करना आवश्यक था कर्मचारियों को काम पर रखने में सक्षम होना। उम्मीद के मुताबिक चीजें नहीं निकलीं।

डोमेन भाषा और C ++ के अलावा, डेवलपर्स LISP में काम करते हैं, जिसका उपयोग परीक्षण मामलों को लिखने के लिए किया जाता है, जो टेस्ट हार्नेस में एम्बेडेड इंटरप्रेटर का उपयोग करता है। हमने एक बिंदु पर LISP को जावा के साथ बदलने पर विचार किया, लेकिन यह सौभाग्यशाली निकला कि हमने नहीं किया।

इसके मुख्य एपीआई के लिए एक आवरण भी है, जिसे C # में लिखा गया है। ऐसा तब किया गया जब ग्राहकों ने इसकी मांग की, ताकि वे C # में अपने आवेदन फिर से लिख सकें। यह एक पर्ल स्क्रिप्ट द्वारा बनाया गया है, जो एपीआई के लिए सी हेडर फाइलें, प्लस महत्वपूर्ण कॉन्फ़िगरेशन फ़ाइल पढ़ता है, और आवरण के लिए सी # कोड लिखता है। पर्ल में सभी टेक्स्ट-प्रोसेसिंग करना C ++ में करने से आसान था ।

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

डोमेन भाषा के लिए संकलक में कुछ YACC / बाइसन प्रोग्रामिंग है। ऑब्जेक्टिव-सी ++ में लिखे गए एप्पल प्लेटफॉर्म के लिए कुछ टेस्टिंग कोड हैं। टीम की कुछ आंतरिक वेबसाइटें (परियोजना प्रबंधन के लिए उपयोग की जाती हैं, डिलिवरेबल्स का हिस्सा नहीं हैं) एएसपी में लिखी जाती हैं, और अन्य पर्ल में सीजीआई-स्क्रिप्ट के रूप में।

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

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


इस सॉफ़्टवेयर उत्पाद के बारे में थोड़ा और बताना अच्छा होगा: क्या औद्योगिक डोमेन (न्यूरोसर्जरी रोबोट उच्च आवृत्ति व्यापार के समान नहीं हैं, उदाहरण के लिए)? क्या अनुमानित आकार (कोड की लाखों पंक्तियों में) है? किस टीम का आकार?
बेसिल स्टारीनेवविच

@BasileStarynkevitch: अतिरिक्त विवरण।
जॉन डेलमैन

इस। यही कारण है कि परियोजनाओं में अच्छे से लेकर बुरे तक कई भाषाएं हैं।
जेरेड स्मिथ

15

कुछ मामलों में, एक उपकरण है जिसे आपको उपयोग करने की आवश्यकता है (जैसे कि ओएस का UI टूलकिट) जो किसी दिए गए भाषा से सबसे आसानी से सुलभ है। IOS और macOS पर उदाहरण के लिए, यदि आप UIKit और AppKit का उपयोग करके GUI एप्लिकेशन लिखना चाहते हैं, तो Swift या Objective-C में लिखना सबसे आसान, सबसे आसान तरीका है। (अन्य भाषाओं के लिए बाइंडिंग हो सकती है, लेकिन वे आपके द्वारा बनाए जा रहे नवीनतम OS रिलीज़ के पीछे हो सकते हैं, इसलिए सभी सुविधाओं की पेशकश नहीं कर सकते।)

तो अक्सर क्या होता है जब कोई एप्लिकेशन क्रॉस-प्लेटफ़ॉर्म होता है, तो ऐप का मुख्य तर्क कुछ भाषा में लिखा जाता है जो दोनों के लिए सुलभ है, और यूआई / ओएस-विशिष्ट टुकड़े जो भी भाषा में काम करते हैं, वे मूल रूप से लिखे जाते हैं।

इसलिए यदि आप एक Windows और macOS एप्लिकेशन लिख रहे हैं, तो आप C ++ में मुख्य तर्क लिख सकते हैं और Windows पर UI के लिए C # और MacOS पर UI के लिए स्विफ्ट का उपयोग कर सकते हैं। इससे समय की बचत होती है क्योंकि आपको दो बार कोर लॉजिक लिखने और दोनों ऐप्स में बग के विभिन्न सेट से निपटने की आवश्यकता नहीं होती है, लेकिन यह एक सच्चे देशी UI की अनुमति देता है जो प्लेटफॉर्म के बीच सबसे कम सामान्य भाजक को पूरा नहीं करता है जैसे कि उपयोग करना एक क्रॉस-प्लेटफ़ॉर्म UI लाइब्रेरी होगा।


MVC FTW! यहां तक ​​कि प्रत्येक ओएस / पर्यावरण के लिए रैपर एप्स के साथ सिर्फ एक क्रॉस प्लेटफॉर्म कोर होने के लिए नीचे
उतरना

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

पूर्व आईओएस डेवलपर के रूप में, मैं पुष्टि कर सकता हूं कि हमने ऐसा किया। हमारे पास PHP में लिखा एक API था जो JSON में संप्रेषित होता था, PHP में लिखा गया एक वेब फ्रंट-एंड जिसमें इसका एक जावास्क्रिप्ट / HTML5 हिस्सा भी था, एक एंड्रॉइड फ्रंट-एंड, जो जावा में लिखा गया था और एक आईओएस फ्रंट-एंड जो ऑब्जेक्टिव-सी में लिखा गया था। । बाद में, स्विफ्ट में नई परियोजनाएं लिखी गईं, लेकिन हमारा आंतरिक ढांचा अभी भी ऑब्जेक्टिव-सी में लिखा गया था। तो कुछ बिंदु पर हमारे अनुप्रयोगों में से एक PHP, Java, Objective-C, Swift, JavaScript और HTML5 में लिखा गया था और 3 प्लेटफार्मों पर उपलब्ध था।
बेले-सोफी

10

इस तथ्य के अलावा कि कुछ विशिष्ट कार्यों के लिए कुछ प्रोग्रामिंग भाषाएं बेहतर अनुकूल हो सकती हैं, व्यावहारिक वास्तविकता है।

व्यावहारिक वास्तविकता में, विचार करने के लिए 2 विशेष रूप से महत्वपूर्ण बिंदु हैं:

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

और निश्चित रूप से एक आवेदन के अक्सर विशिष्ट भाग होते हैं जिनकी पूरी तरह से अलग-अलग ज़रूरतें होती हैं, जैसे:

  • संकलित भाषा में प्रदर्शन संवेदनशील क्षेत्रों का विकास हुआ। उदाहरण भाषा: C ++
  • ऐसे क्षेत्र जिन्हें स्क्रिप्टिंग भाषा में विकसित करना, बदलना आसान, और संभावित अनुकूलन योग्य होना चाहिए। उदाहरण भाषा: लुआ
  • जीयूआई लेआउट। उदाहरण भाषा: HTML
  • इंस्टालर। उदाहरण भाषा / उपकरण: वाईएक्स।
  • बनाएँ। उदाहरण भाषा / उपकरण: सूची में बहुत सारे, आमतौर पर उनमें से कई एक ही बार में।

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


8
HTML प्रोग्रामिंग भाषा नहीं है
बर्गी

1
@ बरगी सही। पीटर का दावा नहीं है कि यह है। यह एक मार्कअप भाषा है।
बेले-सोफी

1
HTML, XAML, QML, आदि सॉफ्टवेयर प्रोग्राम में प्रोग्रामर द्वारा उपयोग की जाने वाली भाषाएं हैं, जो कंप्यूटर को बताती हैं कि क्या करना है - भाषाएं आमतौर पर कड़ाई से आवश्यक नहीं होती हैं, क्योंकि प्रोग्रामर सैद्धांतिक रूप से UI सहित संपूर्ण प्रोजेक्ट को एक ही भाषा में लिख सकते हैं। यही इस सवाल के संदर्भ में प्रासंगिक बनाता है।
पीटर

5

पहले से किए गए सही अन्य बिंदुओं के अलावा:
अनुभव से, कई भाषा या पर्यावरण के फैसले 'यदि आपके पास एक हथौड़ा है, तो सब कुछ एक नाखून की तरह दिखता है' द्वारा किया जाता है, जिसका अर्थ है, लोग उन उपकरणों का उपयोग करते हैं जिनसे वे परिचित हैं।

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

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


5

यह प्रश्न (और कुछ जवाब) लगता है कि अनुप्रयोग कोड के अखंड ब्लॉक हैं - यह जरूरी नहीं है कि मामला हो।

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

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

अखंड अनुप्रयोग अभी भी मौजूद हैं, लेकिन यहां तक ​​कि वे विभिन्न कारणों से विभिन्न भाषाओं का लाभ उठा सकते हैं। आप जावा में किसी एप्लिकेशन का 90% लिख सकते हैं, लेकिन अधिक प्रदर्शन-महत्वपूर्ण अनुभागों के लिए C या C ++ का लाभ उठाने के लिए JNI का उपयोग करें।


मुझे आश्चर्य है कि किसी ने भी एसक्यूएल (या अपनी पसंद की क्वेरी भाषा) का उल्लेख नहीं किया है, आजकल के अधिकांश अनुप्रयोगों में कम से कम कुछ प्रकार के "स्टैक" आर्किटेक्चर हैं।
user3067860

3

मैं 'अलग-अलग भाषाओं की अलग-अलग ताकत है' के बहुत विशिष्ट उदाहरण को इंगित करना चाहता हूं: FORTRAN।

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

SO: यह आज है, और आप खुद को एक कंपनी के लिए काम करते हुए देख रहे हैं, जिसमें एक काफी फैला हुआ उत्पाद है, इसमें से अधिकांश में लिखा है (जावा) (मैं यहां व्यक्तिगत अनुभव से बात करता हूं) । लेकिन आप पाते हैं कि उत्पाद की मुख्य विशेषताओं में से एक संख्यात्मक विश्लेषण के कुछ रूप को फिर से प्राप्त करने जा रहा है, और उस विशेष विश्लेषण के लिए सभी सर्वोत्तम कोड पहले से ही नेट पर उपलब्ध हैं - फोरट्रान में। तो तुम क्या करते हो? आप उन फोरट्रान कोडों में से एक को डाउनलोड करते हैं, इसके इंटरफ़ेस का पता लगाते हैं [यानी सबसे ऊपरी सबरूटीन के तर्क], सी में इसके लिए एक जेएनआई आवरण को कोड़ा, और इसे जावा वर्ग के रूप में पैकेज करें। BAM! आपको बस एक ही बार में तीन भाषाओं में विकास करना होगा। [विशेष रूप से यदि आप पाते हैं कि आपका फोरट्रान कोड COMMON ब्लॉकों का उपयोग करता है - यानी स्थैतिक भंडारण - और इसे थ्रेड-सुरक्षा के लिए संशोधित किया जाना है]


4
या आपकी अच्छी तरह से जांच की गई फोरट्रान गणना कोर को एक बिंदु पर कॉल करके एक नया एल्गोरिथ्म में सुधार किया जाएगा जो पॉइंटर्स पर एक ढेर प्रकार को करने पर निर्भर करता है, जिसे आपने पहले ही सी में लिखा है और आपके पास स्कैन करने के लिए जटिल इनपुट फाइलें हैं, इसलिए आप लिखते हैं। फ्लेक्स में स्कैनर। ओह, और शायद आप शीर्ष पर एक GUI चाहेंगे, जिसे आपको C ++ से कॉल करना होगा। या मुवक्किल वास्तव में पूरी बात को
मटलब

3

क्योंकि प्रोग्रामिंग एक काम नहीं है। यहां तक ​​कि उत्पाद बनाना भी एक काम नहीं है। कई प्रकार के कार्य हैं जो विभिन्न भाषाओं के साथ सर्वश्रेष्ठ रूप से व्यक्त किए जाते हैं।

इसे और अधिक ठोस बनाने के लिए, आइए एक स्टैंड-अलोन ऐप की तरह कुछ सरल करें (वितरित ऐप के लिए किए जाने वाले अधिक कार्य हैं)।

एक उत्पाद होना चाहिए

  • लिखित
  • एक साथ रखा (इसमें तैनाती के लिए संसाधन, जैसे चित्र, फोंट, आदि का संकलन और एकत्रीकरण दोनों शामिल हैं)
  • तैनात
  • कॉन्फ़िगर किया गया
  • नजर रखी

एक भाषा जो किसी उत्पाद के रन-टाइम को लिखने के लिए अच्छी हो सकती है, एक उत्पाद को एक साथ रखने के लिए सिर्फ उतना ही अच्छा नहीं है। और इसी तरह।

हालांकि यहां तक ​​कि किसी उत्पाद को लिखने की प्रक्रिया 1 भाषा में भी नहीं की जा सकती है।

मान लीजिए कि बहुत सारे संरचित डेटा हैं जो उत्पाद में संभाले हुए हैं। क्या डेटा की संरचना लेखन के समय ज्ञात है? यदि यह है, तो आप तैनाती के समय कुछ डेटाबेस को कॉन्फ़िगर करना चाहेंगे। यह जानबूझकर एक भाषा में किया जाता है जो उस भाषा को उत्पन्न कर सकता है जो आपके रन समय में संकलन करेगा।

अब क्या होगा अगर समय-समय पर डेटा की संरचना बदल सकती है? आपको नए डेटा कंस्ट्रक्शन को कोड और डेटाबेस कॉन्फ़िगरेशन में बदलने का एक संरचित तरीका चाहिए। यह अभी तक किसी अन्य भाषा में सबसे अच्छा किया जाता है।

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


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

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

सुनिश्चित लोग अलग-अलग अमूर्तता का उपयोग करते हैं। मेरा कहना यह है कि एक अच्छी भाषा इन सभी सार को व्यक्त करने में सक्षम होनी चाहिए।
लेफ्टनैबाउटआउट

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

कहीं पर ध्यान देने में सक्षम होना वास्तव में ऐसा नहीं है।
लेफ्टनैबाउटआउट

1

सॉफ़्टवेयर विकास उस बिंदु पर आगे बढ़ गया है जहां आप एक ही परियोजना में विभिन्न प्रोग्रामिंग भाषाओं का उपयोग कर सकते हैं, और आप इसे काम कर सकते हैं।

फिर यह सवाल है कि आप एक से अधिक भाषाओं का उपयोग क्यों करेंगे।

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

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

और लोग दूसरों द्वारा लिखे गए कोड का उपयोग करना पसंद करते हैं (दूसरे शब्दों में, कोड जिसे उन्हें स्वयं लिखने के लिए समय नहीं देना पड़ता)। वे किसी भी भाषा में दूसरों द्वारा लिखे गए कोड का उपयोग करने के लिए स्वतंत्र महसूस करते हैं, और फिर उस भाषा में कोड जोड़ते हैं जिसे वे पसंद करते हैं।


8
पहले वाक्य के बारे में: मिश्रित-भाषा कार्यक्रम 50 वर्षों से अधिक समय से एक चीज है।
ब्लरफ्ल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.