सामान्य प्रोग्रामिंग, यह कितनी बार उद्योग में उपयोग किया जाता है


11

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

मैं उत्सुक हूँ - जेनेरिक प्रोग्रामिंग (GP) का उद्योग में बहुत उपयोग किया जाता है? मेरा अनुमान है कि अधिकांश प्रोग्रामर OOP के साथ बहुत अधिक सहज हैं या ऐसी भाषाओं का उपयोग कर रहे हैं जो GP पर जोर या समर्थन नहीं करते हैं, ताकि C ++ में STL डेटा संरचनाओं / फ़ंक्शन को कॉल करने के बाहर, मेरी धारणा यह है कि GP का उपयोग सभी बार-बार नहीं किया जाता है प्रयोग में। लेकिन, इस समय उद्योग के बाहर होने के नाते, इस पर चिकित्सकों से सुनना अच्छा होगा।

(जैसा कि मैं यह लिख रहा हूं, मैं देखता हूं कि सामान्य-प्रोग्रामिंग भी एक वैध टैग नहीं है!)


StackOverflow पर टैग वितरण संभवतः यहाँ पर एक से अधिक सांख्यिकीय साक्ष्य के रूप में उपयोगी है। देखें stackoverflow.com/questions/tagged/generic-programming , stackoverflow.com/questions/tagged/generics
Péter Török

जवाबों:


7

मैं उत्सुक हूँ - जेनेरिक प्रोग्रामिंग (GP) का उद्योग में बहुत उपयोग किया जाता है?

यह वास्तव में टीम और परियोजना के संदर्भ पर व्यापक रूप से निर्भर है।

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

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

लेकिन खेल देव में, ज्यादातर लोग बस किसी भी रूपक से बचेंगे।

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

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

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

बूस्ट (http://boost.org) पुस्तकालयों का एक समूह है, कुछ भारी मेटाप्रोग्रामिंग काले जादू से बना है, और बहुत सी ++ दुकानों में "एसटीएल ++", एसटीएल का एक विस्तार (और यह है) के रूप में उपयोग किया जाता है। हर दुकान इसे कई कारणों से उपयोग नहीं करती है, जैसे कंपाइलर संगतता (कुछ बूस्ट लाइब्रेरी आपके कंपाइलर को क्षमा कर सकती है हर बार जब उसने आपकी भावना को चोट पहुंचाई हो ...) और अधिक बार क्योंकि कुछ डेवलपर्स को समझने में सक्षम नहीं होना चाहिए एक उपकरण कैसे काम करता है (Boost.Spirit ... समझने की कोशिश करें)

आप जिन भी कंपनियों के लिए काम करेंगे, कुछ इस प्रतिमान का उपयोग करेंगे, कुछ कम या बिल्कुल भी नहीं करेंगे या उन्हें मना भी करेंगे।

कोई सर्वसम्मति नहीं है क्योंकि किसी की भी ज़रूरतें, संदर्भ या टीम नहीं है।

लेकिन फिर भी, जाहिर है, इसका उपयोग किया जाता है। शायद पूछें कि अपनी मेलिंग सूची में बढ़ावा देने के लिए कौन अधिक वास्तविक दुनिया के उदाहरणों का उपयोग करता है?


1
क्लाइंट बनाम डिजाइनर के लिए +1। मेरे अनुभव में, कुछ पर्याप्त डेवलपर्स अपने कार्यान्वयन को समझते हैं कि किसी एप्लिकेशन में नए जेनेरिक कोड बनाने का कोई मतलब नहीं है जब तक कि यह स्थिरता में एक बड़ा सुधार नहीं करता है । व्यापक पुन: उपयोग के लिए डिज़ाइन किए गए पुस्तकालय व्यक्तिगत अनुप्रयोगों की तुलना में अधिक बार उस स्थिति में आते हैं।
कार्ल बेज़ेलफेल्ट

विस्तृत उत्तर के लिए धन्यवाद। मैं खुद बूस्ट का प्रशंसक हूं और इस बात पर विचार कर रहा हूं कि क्या बीजीएल में खुदाई की जाए, जिसके लिए अन्य बूस्ट लाइब्रेरी की तुलना में काफी अधिक जीपी ज्ञान की आवश्यकता है। खेल के विकास की दुनिया के बारे में आपकी टिप्पणी बहुत पेचीदा है। मैं आधुनिक खेलों के विकास के करतबों से चकित हूं और यह सुनना दिलचस्प है कि वे शायद सबसे नई प्रोग्रामिंग कार्यप्रणाली से प्रेरित हैं, बल्कि उनमें सबसे आगे हैं।
bd1

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

5

मैं उत्सुक हूँ - जेनेरिक प्रोग्रामिंग (GP) का उद्योग में बहुत उपयोग किया जाता है?

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

मेरा अनुमान है कि अधिकांश प्रोग्रामर OOP के साथ बहुत अधिक सहज हैं या ऐसी भाषाओं का उपयोग कर रहे हैं जो GP पर जोर या समर्थन नहीं करते हैं, ताकि C ++ में STL डेटा संरचनाओं / फ़ंक्शन को कॉल करने के बाहर, मेरी धारणा यह है कि GP का उपयोग सभी बार-बार नहीं किया जाता है प्रयोग में।

कम से कम मेरे अनुभव से, आपकी बात गलत है। OOP और जेनेरिक प्रोग्रामिंग परस्पर अनन्य नहीं हैं। वास्तव में, आपको उनके संयोजन के तालमेल प्रभावों का उपयोग करना चाहिए। जैसा कि मैंने पहले कहा था, इसका कारण यह नहीं है कि आप इसे अक्सर अन्य तकनीकों के रूप में प्रकट करते हैं क्योंकि आपको इसकी आवश्यकता नहीं है। लेकिन यह एक मजबूत विशेषता है और आपको अपने कोड DRY को बनाए रखने में बहुत मदद करता है । उच्च-स्तरीय प्रोग्रामिंग में जीपी के समर्थन पर कौन सी भाषा वास्तव में जोर नहीं देती है? Tiobe की 5 भाषाओं में से 3 शीर्ष 5 जेनरिक / टेम्प्लेट का समर्थन करती हैं। और PHP गतिशील रूप से टाइप किया गया है, तो यह वास्तव में उनकी जरूरत नहीं है। तो क्या?


लिया बिंदु, मेरा मतलब यह नहीं था कि OOP और GP या तो / या पसंद है। हालांकि, मैंने जिन परियोजनाओं को देखा है उनमें से कई जावा में कड़ाई से ओओपी हैं। मुझे लगता है कि जावा के हालिया संस्करण जीपी का समर्थन करते हैं, लेकिन जावा प्रोग्रामर का कौन सा अंश वास्तव में उस कार्यक्षमता का उपयोग करता है? जैसा कि मैंने कहा, मैं उद्योग में काम नहीं कर रहा हूं और मेरे परिप्रेक्ष्य को अच्छी तरह से तिरछा किया जा सकता है, यही वजह है कि मैंने सवाल पूछा।
bd1

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

@FrustratedWithFormsDesigner: जावा में जेनेरिक C ++ टेम्पलेट से पूरी तरह से अलग हैं। जावा जेनेरिक 100% शुद्ध वाक्यगत चीनी हैं, और मेटा-प्रोग्रामिंग का समर्थन नहीं करते हैं।
केविन क्लाइन

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

4

C ++ टेम्प्लेट कंटेनरों से अलग सामान के लिए व्यापक रूप से उपयोग किए जाते हैं - कम से कम मेरी समस्या डोमेन (मात्रात्मक वित्त) में। मैं यह कहने के लिए भी उद्यम करूंगा कि कभी-कभी इसका उपयोग अक्सर किया जाता है, उन उद्देश्यों के लिए जहां सादे पुराने आभासी कार्य पर्याप्त होंगे (और संकलन समय को इतना नहीं बढ़ाएगा)।

लोग इसका उपयोग कोड के दोहराव से बचने और संकलन-समय के बहुरूपता (आभासी प्रेषण के बिना) को प्राप्त करने के लिए करते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.