मैंने अपनी भाषा फेलिक्स में साधारण ओवरलोडिंग और मल्टी-टाइप टाइप-क्लास प्रदान करने का विकल्प चुना।
मुझे लगता है कि (ओपन) ओवरलोडिंग आवश्यक है, विशेष रूप से एक भाषा में जो बहुत सारे संख्यात्मक प्रकारों के रूप में है (फेलिक्स में सभी सी के संख्यात्मक प्रकार हैं)। हालाँकि C ++ के विपरीत, जो टेम्प्लेट बनाकर ओवरलोडिंग का दुरुपयोग करता है, इस पर निर्भर करता है, फेलिक्स पॉलीमॉर्फिज़्म पैरामीट्रिक है: आपको C ++ में टेम्प्लेट के लिए ओवरलोडिंग की आवश्यकता है क्योंकि C ++ में टेम्प्लेट बुरी तरह से डिज़ाइन किए गए हैं।
फेलिक्स में भी टाइप कक्षाएं दी जाती हैं। उन लोगों के लिए जो सी ++ जानते हैं, लेकिन हास्केल को ग्रो नहीं करते हैं, उन लोगों को अनदेखा करें जो इसे ओवरलोडिंग के रूप में वर्णित करते हैं। यह ओवरलोडिंग की तरह दूरस्थ रूप से नहीं है, बल्कि, यह टेम्पलेट विशेषज्ञता की तरह है: आप एक टेम्पलेट की घोषणा करते हैं जिसे आप लागू नहीं करते हैं, फिर विशेष मामलों के लिए कार्यान्वयन प्रदान करें जैसे कि आपको उनकी आवश्यकता है। टाइपिंग पैराओर्मिक रूप से बहुरूपी है, कार्यान्वयन तदर्थ तात्कालिकता द्वारा है, लेकिन यह अप्रतिबंधित होने का इरादा नहीं है: इसे इच्छित शब्दार्थ को लागू करना है।
हास्केल (और C ++) में आप शब्दार्थ नहीं बता सकते। C ++ में "कॉन्सेप्ट्स" विचार मोटे तौर पर शब्दार्थ को अनुमानित करने का एक प्रयास है। फेलिक्स में, आप स्वयंसिद्ध, कटौती, नींबू और प्रमेय के साथ इरादे का अनुमान लगा सकते हैं।
फेलिक्स की तरह अच्छी तरह से राजसी भाषा में ओवरलोडिंग का मुख्य (और केवल) लाभ यह है कि इससे लाइब्रेरी फंक्शन के नाम, प्रोग्राम राइटर और कोड समीक्षक दोनों के लिए याद रखना आसान हो जाता है।
ओवरलोडिंग का प्राथमिक नुकसान इसे लागू करने के लिए आवश्यक जटिल एल्गोरिदम है। यह टाइप इंफ़ेक्शन के साथ बहुत अच्छी तरह से नहीं बैठता है: हालांकि दो पूरी तरह से अनन्य नहीं हैं, दोनों को करने के लिए एल्गोरिथ्म पर्याप्त जटिल है जो प्रोग्रामर शायद परिणामों की भविष्यवाणी करने में सक्षम नहीं होगा।
C ++ में यह एक समस्या भी है क्योंकि इसमें एक मैला मिलान एल्गोरिथ्म है और यह स्वचालित प्रकार के रूपांतरणों का भी समर्थन करता है: फेलिक्स I में इस समस्या का सटीक मिलान और स्वचालित प्रकार के रूपांतरणों की आवश्यकता नहीं है।
इसलिए आपके पास एक विकल्प है जो मुझे लगता है: ओवरलोडिंग या प्रकार का अनुमान। इंजेक्शन प्यारा है, लेकिन यह इस तरह से लागू करने के लिए बहुत कठिन है जो संघर्षों का सही ढंग से निदान करता है। उदाहरण के लिए, Ocaml आपको बताता है कि यह एक संघर्ष का पता लगाता है, लेकिन ऐसा नहीं है जहाँ यह अपेक्षित प्रकार से अनुमान नहीं लगाता है।
ओवरलोडिंग बहुत बेहतर नहीं है, भले ही आपके पास एक गुणवत्ता संकलक हो जो आपको सभी उम्मीदवारों को बताने की कोशिश करता है, यह पढ़ना मुश्किल हो सकता है कि क्या उम्मीदवार पॉलीमॉर्फिक हैं, और इससे भी बदतर अगर यह सी ++ टेम्पलेट हैकरी है।