यह आमतौर पर स्वीकार किया जाता है कि जावा जेनरिक कुछ महत्वपूर्ण तरीकों से विफल रहा। वाइल्डकार्ड और सीमा के संयोजन ने कुछ गंभीर रूप से अपठनीय कोड का नेतृत्व किया।
हालाँकि, जब मैं अन्य भाषाओं को देखता हूं, तो मुझे वास्तव में एक सामान्य प्रकार की प्रणाली नहीं मिल सकती है जिससे प्रोग्रामर खुश होते हैं।
यदि हम इस प्रकार के सिस्टम के डिजाइन लक्ष्य के रूप में निम्नलिखित लेते हैं:
- हमेशा आसानी से पढ़े जाने वाले प्रकार की घोषणाएँ करता है
- सीखने में आसान (कोविरेंस, कंट्रोवर्सी, इत्यादि पर ब्रश करने की आवश्यकता नहीं)
- संकलन-समय त्रुटियों की संख्या को अधिकतम करता है
क्या कोई भाषा है जो इसे सही मिली? अगर मैं गूगल करता हूं, तो मुझे केवल एक ही चीज दिखाई देती है, वह यह है कि भाषा में टाइप सिस्टम कैसे चूसता है। क्या जेनेरिक टाइपिंग में इस तरह की जटिलता निहित है? क्या हमें संकलन समय पर 100% सुरक्षा को सत्यापित करने का प्रयास करना चाहिए?
मेरा मुख्य प्रश्न यह है कि इन तीन लक्ष्यों के संबंध में भाषा "सही है" सबसे अच्छी है। मुझे पता है कि यह व्यक्तिपरक है, लेकिन अभी तक मुझे एक भाषा भी नहीं मिल रही है, जहां सभी प्रोग्रामर इस बात से सहमत नहीं हैं कि सामान्य प्रकार की प्रणाली एक गड़बड़ है।
परिशिष्ट: जैसा कि उल्लेख किया गया है, उपप्रकार / विरासत और जेनरिक के संयोजन से जटिलता पैदा होती है, इसलिए मैं वास्तव में एक ऐसी भाषा की तलाश कर रहा हूं जो दोनों को जोड़ती है और जटिलता के विस्फोट से बचाती है।
Foo<T> where SiameseCat:T
) को लागू करने का कोई तरीका नहीं है और जेनेरिक प्रकार होने की कोई संभावना नहीं है जो परिवर्तनीय नहीं है Object
। IMHO, .NET कुलीन प्रकारों से लाभान्वित होगा जो संरचनाओं के समान थे, लेकिन और भी नंगे-बंधुआ। यदि KeyValuePair<TKey,TValue>
इस प्रकार के होते हैं, तो IEnumerable<KeyValuePair<SiameseCat,FordFocus>>
कास्ट किया जा सकता है IEnumerable<KeyValuePair<Animal,Vehicle>>
, लेकिन केवल तभी टाइप किया जा सकता है जब बॉक्सिंग नहीं किया जा सकता है।
easy-to-read type declarations
? तीसरा मानदंड भी अस्पष्ट है: उदाहरण के लिए, मैं सरणी अनुक्रमणिका को सीमा अपवादों से संकलित समय त्रुटियों में बदल सकता हूं, जब तक कि मैं संकलित समय पर सूचकांक की गणना नहीं कर सकता हूं, तब तक आपको अनुक्रमणिका सरणियों को न दें। इसके अलावा, दूसरा मानदंड सबटाइपिंग का नियम है। यह जरूरी नहीं कि एक बुरी चीज है लेकिन आपको इस बात की जानकारी होनी चाहिए कि आप क्या पूछ रहे हैं।