अवधारणाओं (जैसा कि अवधारणाओं टीएस द्वारा परिभाषित किया गया है) और प्रकार वर्ग केवल इस अर्थ से संबंधित हैं कि वे सामान्य प्रकार के सेटों को प्रतिबंधित करते हैं जिनका उपयोग सामान्य कार्य के साथ किया जा सकता है। इसके अलावा, मैं केवल उन तरीकों के बारे में सोच सकता हूं जिनमें दो विशेषताएं अलग-अलग हैं।
मुझे ध्यान रखना चाहिए कि मैं हास्केल विशेषज्ञ नहीं हूं। इससे दूर। हालांकि, मैं अवधारणाओं टीएस पर एक विशेषज्ञ हूं (मैंने इसे लिखा है, और मैंने इसे जीसीसी के लिए लागू किया है)।
अवधारणाएं (और बाधाएं) भविष्यवाणी करती हैं कि यह निर्धारित करता है कि कोई प्रकार एक सेट का सदस्य है या नहीं। आपको स्पष्ट रूप से घोषित करने की आवश्यकता नहीं है कि कोई प्रकार अवधारणा का मॉडल है (एक प्रकार की कक्षा का उदाहरण)। यह आवश्यकताओं के एक सेट द्वारा निर्धारित किया गया है और संकलक द्वारा चेक किया गया है। वास्तव में, अवधारणाएं आपको "T
लिखने की अनुमति नहीं देती हैं C
" का मॉडल है, हालांकि यह विभिन्न मेटाप्रोग्रामिंग तकनीकों का उपयोग करके आसानी से समर्थित है।
अवधारणाओं गैर प्रकार तर्क विवश करने के लिए इस्तेमाल किया जा सकता है, और constexpr
कार्य करता है और टेम्पलेट metaprogramming की वजह से काफी किसी भी बाधा आप कभी भी लिखने के लिए आशा कर सकता है व्यक्त (जैसे, एक हैश सरणी जिसका हद तक एक प्रमुख संख्या होनी चाहिए) । मुझे विश्वास नहीं है कि यह टाइप कक्षाओं के लिए सच है।
अवधारणाएं प्रकार प्रणाली का हिस्सा नहीं हैं। वे घोषणाओं के उपयोग को बाधित करते हैं और कुछ मामलों में टेम्पलेट तर्क कटौती। टाइप क्लास टाइप सिस्टम का हिस्सा हैं और टाइप चेकिंग में भाग लेते हैं।
अवधारणा मॉड्यूलर प्रकार की जांच या संकलन का समर्थन नहीं करती है। अवधारणाओं के खिलाफ टेम्पलेट परिभाषाओं की जांच नहीं की जाती है, इसलिए आप अभी भी तत्कालता के दौरान देर से पकड़े गए प्रकार की त्रुटियों को प्राप्त कर सकते हैं, लेकिन यह लाइब्रेरी लेखकों के लिए लचीलापन की एक निश्चित डिग्री जोड़ता है (उदाहरण के लिए, एल्गोरिदम में डिबगिंग कोड जोड़ने से इंटरफ़ेस नहीं बदलेगा)।क्योंकि टाइप क्लास टाइप सिस्टम का हिस्सा हैं, जेनेरिक एल्गोरिदम को मॉड्यूलरली से चेक और संकलित किया जा सकता है।
अवधारणाएं टीएस बाधाओं के क्रम के आधार पर जेनेरिक एल्गोरिदम और डेटा संरचनाओं के विशेषज्ञता का समर्थन करती है। मैं हास्केल में एक विशेषज्ञ नहीं हूं, इसलिए मुझे नहीं पता कि यहां समकक्ष है या नहीं। मुझे एक नहीं मिल रहा है।
अवधारणाओं का उपयोग रनटाइम लागत कभी नहीं जोड़ पाएगा। आखिरी बार मैंने देखा, टाइप क्लास वर्चुअल फंक्शन कॉल के रूप में एक ही रनटाइम ओवरहेड लगा सकता है, हालांकि मैं समझता हूं कि हास्केल उन लोगों को अनुकूलित करने में बहुत अच्छा है।
मुझे लगता है कि उन प्रमुख मतभेद जब सुविधा (अवधारणाओं टीएस) की तुलना (हास्केल प्रकार वर्ग) सुविधा के लिए कर रहे हैं।
लेकिन दो भाषाओं में अंतर्निहित दार्शनिक अंतर है - और यह कार्यात्मक बनाम नहीं है जिसे आप लिख रहे हैं सी ++ का स्वाद। हास्केल मॉड्यूलर बनना चाहता है: ऐसा होने के कारण कई अच्छी संपत्तियां हैं। सी ++ टेम्पलेट्स मॉड्यूलर होने से इनकार करते हैं: इंस्टेंटेशन-टाइम लुकअप रनटाइम ओवरहेड के बिना टाइप-आधारित ऑप्टिमाइज़ेशन की अनुमति देता है। यही कारण है कि सी ++ जेनेरिक पुस्तकालय दोनों व्यापक पुन: उपयोग और अद्वितीय प्रदर्शन प्रदान करते हैं।
स्रोत
2015-08-21 18:50:34
अवधारणाएं वर्तमान में अनियमित मेटाप्रोग्रामिंग सुविधाओं के लिए प्रकार प्रणाली का एक रूप है (सबकुछ एक 'टाइपनाम' है, मान मानकों को नहीं देख रहा है)। टाइप क्लास अपने तर्कों के प्रकार पर निर्भर कार्यों को ओवरलोड/चुनने की अनुमति देते हैं। https://m.reddit.com/r/haskell/comments/1e9f49/concepts_in_c_template_programming_and_type/ यह एक प्रासंगिक चर्चा हो सकती है। –