जब डिजाइनिंग और एक वस्तु उन्मुख प्रोग्रामिंग भाषा implenting, कुछ बिंदु से एक में एक (जैसे मौलिक प्रकार लागू करने के बारे चुनाव करना चाहिए int
, float
, double
या समकक्ष) वर्ग या कुछ और के रूप में। स्पष्ट रूप से, सी परिवार की भाषाओं में उन्हें वर्गों के रूप में परिभाषित नहीं करने की प्रवृत्ति है (जावा में विशेष आदिम प्रकार हैं, सी # उन्हें अपरिवर्तनीय संरचनाओं के रूप में लागू करता है, आदि)।
मैं एक बहुत ही महत्वपूर्ण लाभ के बारे में सोच सकता हूं जब मूलभूत प्रकारों को कक्षाओं के रूप में लागू किया जाता है (एक एकीकृत पदानुक्रम के साथ एक प्रकार की प्रणाली में): ये प्रकार जड़ प्रकार के उचित लिस्कोव उपप्रकार हो सकते हैं। इस प्रकार, हम बॉक्सिंग / अनबॉक्सिंग (या तो स्पष्ट या निहित), आवरण प्रकार, विशेष विचरण नियम, विशेष व्यवहार आदि के साथ भाषा को उलझाने से बचते हैं।
बेशक, मैं आंशिक रूप से समझ सकता हूं कि भाषा डिजाइनर अपने तरीके से यह क्यों तय करते हैं: कक्षा के उदाहरणों में कुछ स्थानिक ओवरहेड होते हैं (क्योंकि उदाहरणों में उनकी मेमोरी लेआउट में एक व्यवहार्य या अन्य मेटाडेटा शामिल हो सकता है), जो कि आदिम / संरचना की आवश्यकता है। है (यदि भाषा उन पर वंशानुक्रम की अनुमति नहीं देती है)।
क्या स्थानिक दक्षता (और बेहतर स्थानिक स्थानीयता, विशेष रूप से बड़े सरणियों में) एकमात्र कारण है कि मौलिक प्रकार अक्सर वर्ग नहीं होते हैं ?
मैंने आमतौर पर उत्तर को हां मान लिया है, लेकिन कंपाइलरों के पास विश्लेषण एल्गोरिदम बच गए हैं और इस प्रकार वे यह घटा सकते हैं कि क्या वे (चुनिंदा) स्थानिक ओवरहेड को छोड़ सकते हैं जब एक उदाहरण (किसी भी उदाहरण, न कि केवल एक मौलिक प्रकार) को सख्ती से सिद्ध किया जाए। स्थानीय।
क्या उपरोक्त गलत है, या कुछ और है जो मुझे याद आ रहा है?