खेल, yea या nay के लिए एसटीएल? [बन्द है]


145

हर प्रोग्रामिंग भाषा में कंटेनरों, एल्गोरिदम और अन्य सहायक सामानों की मानक लाइब्रेरी होती है। C #, Java, और पायथन जैसी भाषाओं के साथ, भाषा का मानक मानक के बिना उपयोग करने के लिए यह व्यावहारिक रूप से समझ से बाहर है ।

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

तो ... एसटीएल एक अच्छा फिट है या नहीं?


14
EASTL एक अच्छा पढ़ने वाला ओपन
Matias Valdenegro

1
हाँ, यह वही है जिसका मैं "हमारे अपने कार्यान्वयन का उपयोग करता हूं"। :)
उदार

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

वास्तव में जावा का बिना मानक मानक के उपयोग करना बहुत बोधगम्य है, इसे J2ME कहा जाता है: p
बार्ट वैन ह्युकेलोम

1
बड़ा अच्छा सवाल!
एलन

जवाबों:


191

जब मैंने पेशेवर खेल के विकास में काम किया, तो एसटीएल बहुत अपरिपक्व और फूला हुआ था। लेकिन वह १० साल पहले था।

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

जो लोग आपको एसटीएल का उपयोग नहीं करने के लिए कहते हैं उनमें से कुछ इस तर्क का उपयोग करते हैं कि यह हमेशा सही या समस्या का सबसे अच्छा समाधान नहीं है। लेकिन यह सवाल का जवाब नहीं है। सवाल यह होना चाहिए: क्या खेलों में एसटीएल का उपयोग करने के साथ कुछ गलत है? मैं कहता हूँ कि नहीं, एसटीएल एक उपयोगकर्ता द्वारा स्वयं के साथ आने से बेहतर समय है।

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


49
यह बहुत ठोस सलाह है। "एसटीएल धीमा है" मेम कम से कम पांच साल के लिए सच नहीं है और शायद अच्छी तरह से लंबे समय तक है। यह तब तक जीवित रहेगा, जब तक "जावा धीमा है" और ".NET धीमा है" बकवास है, जब तक कि यह सभी के लिए स्पष्ट नहीं हो जाता है कि यह अब मामला नहीं है। एसटीएल आपको बेहतर कार्यक्रम लिखने में मदद करता है; मैं यहाँ तक कहना चाहूँगा कि इसका उपयोग नहीं, ज्यादातर मामलों में (उस ०.१% से अलग कहीं), गैर-जिम्मेदाराना है। (दावा है कि यह किसी दिए गए समस्या डोमेन के लिए उपयुक्त नहीं है, अक्सर समस्या से निपटने के तरीके से अधिक होता है, न कि एसटीएल से ही। अपने कोड, लोगों को ठीक करें ।)
एड रोपल

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

22
@ साइमन: सभी उचित सम्मान के साथ, अंतिम उदाहरण अत्यधिक चंचलता का संकेत है, और इसका एसटीएल से कोई लेना-देना नहीं है ... वह व्यक्ति किसी भी अन्य भाषा में सूचियों के साथ ऐसा ही करेगा, जिसे क्रमबद्ध किया जा सकता है। यह उसकी सोच है जो टूटी हुई है।
ggambett 13

@ एडीआरपीएल पीपीएम छवि फ़ाइलों के लिए एसटीएल पार्सर को लागू करने की कोशिश करता है (कुल मिलाकर कोड की 100 पंक्तियों से कम अगर केवल पी 6 या पी 3 को लक्षित करें)। परिणामी कोड का आधा हिस्सा टिप्पणी लाइनों को छोड़ देने के लिए है क्योंकि एसटीएल ऐसा कुछ प्रदान नहीं करता हैif(stream.nextCharacter() == '#') stream.skipLine();
GameDeveloper

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

63

मैं कहूंगा कि, मेरे सिर के ऊपर से, एसटीएल का उपयोग करना एक बेहतर विचार है, जब तक कि आप वास्तव में नहीं जानते कि आप इसका उपयोग क्यों नहीं करना चाहते हैं।

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

एसटीएल ने "दुनिया के एक संकीर्ण दृष्टिकोण" को लागू करने वाली शिकायतों को मुझे थोड़ा मूर्खतापूर्ण बताया। वे कंटेनर हैं। उनके पास परिचालनों का एक सीमित समूह है क्योंकि कंटेनरों के पास परिचालनों के सीमित समूह हैं। आप क्या कर रहे हैं कि इस के साथ जिब नहीं है?


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

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

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

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

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

35

मैंने खेलों के लिए एसटीएल का उपयोग नहीं करने के बहुत कम कारण देखे हैं।

स्मृति आवंटन समस्याओं के लिए, बहुत से लोग यह नहीं जानते हैं, लेकिन आप अपने STL कंटेनर वर्गों के लिए कस्टम आवंटन लिख सकते हैं। आवंटन कैसे किए जाते हैं यह निर्धारित करने के लिए एलोकेटर मूल रूप से आपके द्वारा चलाए जाने वाले नीति वर्ग हैं। इनका उपयोग करके आप आमतौर पर अपनी पसंद के प्लेटफ़ॉर्म पर जो भी स्मृति समस्याएँ हैं, उनके आसपास काम कर सकते हैं।

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


वास्तव में मानचित्र में बड़े गैर पॉइंटर प्रकारों का उपयोग करना एक अच्छा उपयोग मामला है क्योंकि स्टडलिब मानचित्रों में पुनरावृत्तियों को अमान्य नहीं करने की आवश्यकता होती है जो कार्यान्वयन को इंगित करने वाले और व्यक्तिगत रूप से आवंटित किए गए तत्वों का उपयोग करने में मजबूर करते हैं। खेलों के लिए सबसे अच्छा समाधान google::sparse_mapकिसी का स्वयं उपयोग करना या लिखना है।
v.oddou

घना मानचित्र क्यों नहीं?
GameDeveloper

23

डिफ़ॉल्ट एसटीएल में उचित संख्या में मुद्दे हैं जो खेल के साथ उपयोग करना मुश्किल बनाते हैं, खासकर जब यह मेमोरी संरेखण की बात आती है।

एक अनुकूलित संस्करण जैसे कि ईए एसटीएल विशेष रूप से खेलों के लिए डिज़ाइन किया गया है और आपको बेहतर मेमोरी प्रदर्शन और कंसोल प्रयोज्य प्राप्त कर सकता है। यह 2016 में खुला स्रोत बन गया, BSD-3 क्लॉज के तहत, GitHub पर एक रिपॉजिटरी के साथ ।


19
एसटीएल के मेमोरी उपयोग और गेम के मुद्दे आमतौर पर कस्टम एलोकेटर क्लासेस के साथ हल किए जा सकते हैं। दरअसल, मेरी पिछली नौकरी में, हमारा "कस्टम" वेक्टर वर्ग std::vectorडिफ़ॉल्ट आवंटनकर्ता के उस ओवररोड के आसपास सिर्फ एक पतला आवरण था ।
ब्लेयर होलोवे

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

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

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

1
@ साइमन: मैं यहां पार्टी में थोड़ा लेट हो गया हूं, लेकिन मैं उत्सुक हूं कि क्या आप इसका एक विशिष्ट उदाहरण देंगे। एक विशिष्ट समस्या को हल करने का एक अच्छा उदाहरण क्या है जो कुशलतापूर्वक हल करने के लिए एसटीएल बहुत सामान्य है?
BRaffle

21

यहाँ बताया गया है कि माइक एक्टन (इंसोमनिया गेम्स ऑफ स्पाय्रो द ड्रैगन, रैकेट एंड क्लैंक एंड रेसिस्टेंस फेम के इंजन डायरेक्टर) को यहां पूछे जाने पर यह कहना पड़ा । ध्यान दें कि उनसे एसटीएल और बूस्ट दोनों के बारे में पूछा गया था जो कि गेम देव में उपयोग से संबंधित हैं।

एसटीएल / बूस्ट, क्या यह गमेदेव में है? यदि केवल इसके कुछ हिस्से, कौन से हैं?

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

मैंने यह भी देखा है कि अधिकांश प्रो गेम डेवलपर C ++ की तुलना में C की ओर अधिक प्रयास करते हैं।


18
मैं सी। की ओर अधिक प्रयास करने पर असहमत हूं। खेल डेवलपर्स के साथ-साथ एसडीके लेखकों के विशाल बहुमत सी ++ का उपयोग करते हैं। वास्तव में अंतिम प्रमुख C उपयोगकर्ता आईडी था और यहां तक ​​कि कार्मैक भी C ++ से अधिक हो गया है ...
Goz

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

50
एसटीएल के साथ मेरा अनुभव लगभग विपरीत रहा है। यह कुशल और समय की बचत है। यदि आपको अपने स्वयं के टेम्पलेट लाइब्रेरी या कंटेनर लाइब्रेरी को रोल करने की आवश्यकता महसूस होती है, तो यह ठीक है। लेकिन यह मत दिखाओ कि STL (या बढ़ावा, उस बात के लिए) बुरा है। मैंने वाणिज्यिक iPhone, Nintendo DS, Wii, PC, Mac और Xbox गेम पर बड़े पैमाने पर STL का उपयोग किया है। हर बार जब मुझे किसी और की "बेहतर" लाइब्रेरी का उपयोग करने के लिए मजबूर किया जाता है, तो मैंने पाया है कि इसमें कमी और छोटी गाड़ी है।
BRaffle

5
यह डीएस पर उतना ही अच्छा काम करता है जितना यह किसी अन्य प्लेटफॉर्म पर करता है जिसे मैंने इसे इस्तेमाल किया है। मैंने UI और AI कोड पर STL का उपयोग किया। खेल ds.ign.com/articles/832/832147p1.html था । मैं एक छोटे से स्टूडियो में काम कर रहा था जो Amaze का हिस्सा था, जो Foundation 9. का हिस्सा था
BRaffle

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

19

यदि आप अपने आप को किसी कारण के लिए STL में मौजूद कुछ चीज़ों को फिर से लिखना चाहते हैं, तो रोकें । एसटीएल का उपयोग करें।

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


7
मानचित्र <> लगभग कभी भी ऐसा नहीं है जो आप किसी गेम के संदर्भ में कुशल मेमोरी या सीपीयू के लिए उपयोग करना चाहते हैं। hash_map <> लगभग हमेशा एक बेहतर विकल्प होता है, हालांकि hash_map का प्रदर्शन विक्रेता के साथ काफी भिन्न होता है। यदि आप एक ऐसे खेल का निर्माण कर रहे हैं जो या तो कंसोल के लिए है या स्केलेबल नेटवर्क प्ले की सुविधाएँ एसटीएल आपके उद्देश्यों के लिए बिल्कुल धीमा या फूला हुआ हो सकता है।
बेन जिगलर

3
unordered_map <> अब व्यापक रूप से उपलब्ध है और वर्तमान TR1 मसौदे में प्रदर्शन की सख्त आवश्यकताएं हैं। (ओवरस्पीसीफिकेशन के संदर्भ में मुझे लगता है - यह भी हैशिंग को खोलने से मना करता है, और जबकि यह आमतौर पर धीमा होता है, मुझे नहीं लगता कि इसे मानक रूप से निषिद्ध होना चाहिए।)

5
एसटीएल एल्गोरिदम के साथ-साथ कंटेनर भी प्रदान करता है। एल्गोरिथ्म के stl संस्करण का उपयोग नहीं करने का कोई कारण नहीं है। उदाहरण के लिए, std::sortआम तौर पर अंतःस्रावी का उपयोग करता है, धधकते हुए तेजी से और जटिल पर्याप्त है कि आप इसे स्वयं नहीं करना चाहेंगे।
deft_code 20

सत्य unordered_mapया तो C ++ 11 का है या बूस्ट दोनों बहुत धीमा है, आप जो चाहते हैं वह एक खुला पता हैश मैप है, जैसे कि google :: sparse_map या अपना खुद का।
v.oddou

16

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

क्या यह आपके मंच के लिए अच्छा है? जरुरी नहीं। यदि आप कंसोल के लिए लिख रहे हैं तो आपको मेमोरी और कैश के उपयोग के बारे में बहुत सावधान रहना होगा। STL इसे बहुत आसान नहीं बनाता है।

मुझे लगता है कि सभी अक्सर हम "खेल" को "उच्च प्रदर्शन वाले वास्तविक समय के खेल" के लिए गलती करते हैं जो एम्बेडेड या बीस्पोक हार्डवेयर पर चलते हैं, लेकिन एक अंतर बनाना महत्वपूर्ण है। यदि आप एक ऐसा विंडोज गेम लिख रहे हैं जो लगातार 60fps पर फुलस्क्रीन में चलने की कोशिश नहीं कर रहा है, तो उन उपकरणों से बचने का कोई कारण नहीं है जो मानक पुस्तकालय आपके पास हैं।


10

मुझे पता है कि यह पार्टी के लिए बहुत देर से है, लेकिन समय बदल जाता है और उत्तर चारों ओर रहते हैं। C ++ 11 में बहुत व्यापक परिवर्तन हैं, जिनमें से कई C ++ और मानक पुस्तकालय के प्रदर्शन को बढ़ाने के लिए हैं। ऐसा लगता है कि जो लोग एसटीएल या बूस्ट का उपयोग नहीं करते हैं, वे नए मानकों का पालन नहीं करते हैं, या तो घरेलू सुधारों को महत्वपूर्ण सुधारों के अभाव में छोड़ देते हैं, बेशक यह हमेशा ऐसा नहीं होता है।

मैंने ईए पर थोड़े समय के अपवाद के साथ, 90 के दशक से लेकर आज तक हर परियोजना पर एसटीएल का उपयोग किया है। मुझे लगता है कि एसटीएल के विरोधी पक्ष के पास इसे इस्तेमाल नहीं करने के कुछ मामूली तर्कसंगत कारण थे। वे काफी हद तक चले गए हैं। कस्टम आवंटन करने वाले एक समाधान हैं, रिजर्व का उपयोग करना एक और है, और मूल्य से चीजों को पारित नहीं करना एक तीसरा है, लेकिन ये बहुत सरल हैं और किसी भी प्रोग्रामर को ये जानना चाहिए। अधिक महत्वपूर्ण बात यद्यपि एल्गोरिदम का उपयोग है। कंपाइलर लेखक जानते हैं कि एक for_each () क्या करता है और कोड को अनुकूलित कर सकता है। जो कि होम रोल्ड लूप के साथ नहीं हो सकता है। for_each () एक कास्ट ऑब्जेक्ट पर बेहतर है। Microsoft क्रमांकन सहित कई तरीकों से for_each का अनुकूलन करता है। उनके पास एएमपी लाइब्रेरी भी है जिसमें समानांतर_फोर्मेंट () है। यदि आपको मौका मिलता है, तो इस बारे में संकलक इंजीनियरों से बात करें। कंसोल कंपाइलर का उपयोग करने के लिए अनुकूलित किया जा रहा है, इसलिए यह ' एक चिकन और अंडे की समस्या का एक सा। Microsoft C ++ 11 के साथ बहुत भारी हो रहा है और अगला XBox अलग नहीं होगा। मुझे PS4 के बारे में कोई जानकारी नहीं है, हमने अभी तक एक भी खोज नहीं की है।

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

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

लंबे लिंक समय और कोड ब्लोट के बारे में, नए बाहरी टेम्पलेट को इसके साथ मदद करनी चाहिए। आम तौर पर मुझे लगता है कि लंबे संकलन समय अधिक युग्मन और pch के दुरुपयोग से आते हैं।

होमस्पून पर एसटीएल का उपयोग करने का सबसे सम्मोहक कारण लाखों लोग हैं जो एसटीएल के साथ आपकी सहायता कर सकते हैं। हमेशा की तरह, समय से पहले परीक्षण और परीक्षण, परीक्षण का अनुकूलन न करें।


दिलचस्प विचार; " क्लास आधारित नया और हटाएं " का क्या मतलब है ? आपका मतलब है, पहले से ही ढेर पर वस्तुओं का उपयोग करके एक प्रक्रिया को गति देना?
जॉन्बेकर्स

9

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


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

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

5

निर्भर करता है। प्रोजेक्ट कितना बड़ा है, कौन सा प्लेटफ़ॉर्म है, और टाइमलाइन क्या है?

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

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

जानिए कब करें सुविधा के लिए प्रदर्शन!


1
"पता है कि सुविधा के लिए व्यापार प्रदर्शन कब करना है"। हाँ। यह वाक्य केवल उतना ही अच्छा है जितना कि कोई उत्तर। पता लगाएँ कि आपको अपने खेल के साथ क्या हासिल करना है, साथियों से परामर्श करें और तय करें कि क्या एसटीएल आपको वहां पहुंचने में मदद करेगा या आपको बाधा देगा। मैं कहूंगा कि यदि आप अपने गेम के साथ अगली-जेनेरिक ग्राफिक्स और प्रदर्शन के लिए बार सेट नहीं करना चाहते हैं, तो एसटीएल शायद आपकी मदद करेगा।
gkimsey

4

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

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


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

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

4

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

सबसे महत्वपूर्ण बात यह समझना है कि प्रत्येक कंटेनर प्रकार की ताकत और कमजोरियां क्या हैं और जो काम आप कर रहे हैं उसके लिए सही कंटेनर चुनें।


4

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

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


4

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


3

मैंने एसटीएल का उपयोग करके गेम बनाया है और मुझे यह पसंद है, और यह अच्छा प्रदर्शन करता है।


3

अच्छा प्रश्न! एक अधिक विशिष्ट प्रश्न यह है कि कुछ सामान्य आवश्यकताएं क्या हैं जो एक खेल में एसटीएल और बूस्ट के साथ नहीं मिल सकती हैं।

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

इसके अतिरिक्त, टेम्प्लेट के अति प्रयोग से एक बड़े कोड बेस में बहुत लंबा संकलन समय हो सकता है, और यह आपके निष्पादन योग्य के आकार को फुला देगा ताकि यह अब ps3 पर सहायक कोर के रूप में, कैश के भीतर फिट न हो।

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


2

STL आपके खेल के लिए एक अच्छा फिट है अगर STL आपके खेल के लिए एक अच्छा फिट है।

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

लोगों को अपने खेल में एसटीएल का उपयोग करने से बचना चाहिए क्योंकि अन्य लोग खेल में एसटीएल का उपयोग करने से बचते हैं; यदि वे अपने सभी विकल्पों का वजन कर चुके हैं तो उन्हें इसका उपयोग करने से बचना चाहिए और वे वास्तव में मानते हैं कि एक और कार्यान्वयन उनके उत्पाद की गुणवत्ता में सुधार करेगा।


2
मैं आपकी टिप्पणी के अंतिम भाग के साथ 100% सहमत हूं, लेकिन मैं इससे भी आगे जाऊंगा: यदि आप निर्णायक रूप से प्रदर्शित कर सकते हैं कि क्यों एसटीएल एक अच्छा विकल्प नहीं है, तो एसटीएल का उपयोग न करें। नहीं तो करो। कार्गो पंथ (सब कुछ "ओह, गेम डेवलपर्स सी +!" का उपयोग "ओह, गेम डेवलपर्स एसटीएल का उपयोग नहीं करते हैं!") अस्वस्थ है। मैं, हालांकि, अपने दूसरे पैराग्राफ के साथ एक मुद्दे का एक बिट ले जाऊंगा: यह बहुत संभावना नहीं है कि जो लोग अभी भी भोले हैं वे एसटीएल को फिर से लागू करने के बारे में सोचने के लिए पर्याप्त हैं एक अच्छा विचार vectorएसटीएल लोगों की तुलना में बेहतर निर्माण होगा । जब तक आप यह कर सकते हैं, तब तक आपको नहीं लगता कि आपको इसकी आवश्यकता है! :-)
एड रोपल

2

अधिकांश प्रश्नों के साथ उत्तर "yea या nay" कभी भी काला या सफेद नहीं होता है। एसटीएल कुछ समस्याओं के लिए एक अच्छा फिट है, इसका उपयोग उन समस्याओं के लिए ठीक होना चाहिए। यह मानने की गलती है कि यह बेकार है, फिर भी यह मान लेना एक गलती है कि यह हर स्थिति में उपयोग करने के लिए उपयुक्त है।

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

इसमें यह जोड़ें कि यदि आपका कोडबेस नॉन-एसटीएल है, तो आपके पास कस्टम एलोकेटर्स को सही तरीके से लागू करने के लिए एसटीएल या टेम्प्लेट कॉन्सेप्ट से कोई परिचित नहीं हो सकता है।


2

मुझे लगता है कि इस चर्चा को संक्षेप में प्रस्तुत किया जा सकता है:

औसत दर्जे का लिखित आवेदन-विशिष्ट कोड <अच्छी तरह से लिखा गया सामान्य प्रयोजन कोड <अच्छी तरह से लिखा गया आवेदन-विशिष्ट कोड

जिस किसी का भी घरेलू समाधान 3 श्रेणी में आता है वह निश्चित रूप से अपनी विशेष समस्या के मूल प्रश्न का उत्तर जानता है। एसटीएल श्रेणी 2 में आता है। इसलिए किसी ऐसे व्यक्ति के लिए जिसे प्रश्न पूछने की आवश्यकता है, "क्या मुझे एसटीएल का उपयोग करना चाहिए ", इसका उत्तर शायद हां है।


2

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


1

मुझे लगता है कि यह प्रश्न वास्तव में एक बड़ा अनकहा प्रश्न है - क्या मुझे अपने Y में X का उपयोग करना चाहिए ? और वास्तव में जवाब देने का एकमात्र तरीका यह है कि वह अपने लिए प्रयास करे। हर उस व्यक्ति के लिए जो आपको कहता है कि X बहुत अच्छा काम करता है, आपको कोई ऐसा व्यक्ति मिलेगा जो कहता है कि यह भयानक है। और वे दोनों सही हैं - अपनी परियोजना के लिए।

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


1
जब आप सही होते हैं, तो रिफैक्टरिंग के लिए भारी जुर्माना हो सकता है; इसलिए किसी अनियंत्रित के बजाय एक सूचित निर्णय को आगे बढ़ाने से आपको लंबे समय में समय की बचत होगी।
एलन

1

मैं एसटीएल को अस्वीकार कहता हूं। मेरा कारण काफी सरल है:

  1. आपको खेल लिखने के लिए STL की आवश्यकता नहीं है। बड़े वाले भी नहीं।
  2. एसटीएल नाटकीय रूप से आपके संकलन समय को बढ़ाता है।
  3. बड़ा संकलन समय आपके विकास पर कम पुनरावृत्तियों की ओर जाता है।

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

महंगे पुनरावृत्तियों से लोगों की विशाल विकास टीम को बहुत कम वास्तव में होने वाले सामान के साथ काम करने की कोशिश होती है। मैंने इसे देखा है और इसे सुना है, और दोषियों में से एक टेम्पलेट पुस्तकालयों के लिए संकलन समय लगता है।


1
मैं संकलन समय के बारे में सहमत हूं। कोई भी महत्वपूर्ण संकलन समय खोए काम की मात्रा को दोगुना कर देता है; उदाहरण के लिए, यदि संकलन 5 मिनट तक रहता है, तो आप हर बार कॉफी प्राप्त करने में 10 मिनट खर्च करेंगे। ;)
Ipsquiggle

जब मैं इस तर्क के दोनों पक्षों को देखता हूं, तो मुझे कहना होगा कि मैं आपके तर्क, रिचर्ड के साथ दृढ़ता से सहमत हूं। +1।
इंजीनियर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.