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