मैंने कई अवसरों पर किसी भाषा के अंतर्निहित डेटा संरचनाओं, कार्यों और कक्षाओं को फिर से कार्यान्वित किया है। एम्बेडेड डेवलपर के रूप में, मुख्य कारण मैं ऐसा करता हूं जो गति या दक्षता के लिए होता है। मानक पुस्तकालयों और प्रकारों को विभिन्न स्थितियों में उपयोगी होने के लिए डिज़ाइन किया गया था, लेकिन ऐसे कई उदाहरण हैं जहां मैं एक और विशेष संस्करण बना सकता हूं जो कि मेरे वर्तमान प्लेटफ़ॉर्म की सुविधाओं और सीमाओं का लाभ उठाने के लिए कस्टम-अनुरूप है। यदि भाषा मौजूदा वर्गों को खोलने और संशोधित करने का तरीका प्रदान नहीं करती है (जैसे कि आप रूबी में, उदाहरण के लिए) कर सकते हैं, तो कक्षा/कार्य/संरचना को पुन: कार्यान्वित करने का एकमात्र तरीका हो सकता है।
उदाहरण के लिए, एक सिस्टम जिस पर मैंने काम किया था, एक एमआईपीएस सीपीयू का इस्तेमाल किया जो 32-बिट संख्याओं के साथ काम करते समय तेज़ था लेकिन छोटे लोगों के साथ काम करते समय धीमा था। मैंने 16-बिट पूर्णांक के बजाय 32-बिट पूर्णांक का उपयोग करने के लिए कई डेटा संरचनाओं और कार्यों को फिर से लिखा, और यह भी निर्दिष्ट किया कि फ़ील्ड 32-बिट सीमाओं के साथ गठबंधन किए जाएंगे। नतीजा कोड के एक खंड में एक उल्लेखनीय गति वृद्धि था जो सॉफ़्टवेयर के अन्य हिस्सों को बाधित कर रहा था।
कहा जा रहा है कि यह एक छोटी सी प्रक्रिया नहीं थी। मैं उस संरचना का उपयोग करने वाले हर समारोह को संशोधित करने के लिए समाप्त हुआ और मैंने कई मानक लाइब्रेरी कार्यों को फिर से लिखना शुरू कर दिया। इस विशेष उदाहरण में, लाभ ने काम से अधिक लाभ उठाया। सामान्य मामले में, हालांकि, यह आमतौर पर परेशानी के लायक नहीं है। हार्ड-टू-डीबग समस्याओं के लिए एक बड़ी संभावना है, और ऐसा लगता है कि यह लगभग हमेशा अधिक काम करता है। जब तक आपके पास विशिष्ट संरचनाएं या प्रतिबंध नहीं हैं जो मौजूदा संरचनाएं/कक्षाएं पूरी नहीं करती हैं, तो मैं उन्हें पुनः लागू करने के खिलाफ अनुशंसा करता हूं।
जैसा कि माइकल का उल्लेख है, को संरचनाओं को फिर से कार्यान्वित करने के लिए वास्तव में उपयोगी है, भले ही आप ऐसा न करें। आपको भविष्य में एक समस्या मिल सकती है जिसे मौजूदा डेटा संरचनाओं में उपयोग किए गए सिद्धांतों और तकनीकों को लागू करके हल किया जा सकता है।
एक यात्रा विक्रेता के लिए एक अधिक कुशल समाधान प्राप्त करने के लिए LinkedList के add() और iterator.remove() के साथ ArrayList के यादृच्छिक उपयोग को जोड़ना जैसे? उदाहरण के लिए – Jason
... लेकिन कृपया यह न भूलें कि वास्तव में अच्छा कार्यान्वयन कैसे करना है, यह उतना आसान नहीं है जितना दिखता है। आप कई चीजों को ध्यान में रखना चाहते हैं - प्रदर्शन, इंटरफ़ेस जटिलता सीमाएं, समवर्ती और अन्य। यह एक अच्छा अभ्यास है, लेकिन ज्यादातर बार, जब स्थिति इसे अनुमति देती है, तो भाषा मानक पुस्तकालय को पुन: कार्यान्वित करने से बचें, ज्यादातर बार, आपको यह गलत लगता है। यदि आप जावा में उदाहरणों की तलाश में हैं, तो Google संग्रह में स्वयं के कुछ विशिष्ट कार्यान्वयन होते हैं, उन्हें जांचें :) –