18

बनाम हास्केल प्रकार वर्ग पर इस PDF presentation में, स्लाइड # 54 इस सवाल है:जेनेरिक्स और कंस्ट्रेन्ड बहुरूपता Subtyping

खुला प्रश्न:

जेनरिक और विवश बहुरूपता के साथ एक भाषा में, कर आपको उप-प्रकार की भी आवश्यकता है?

मेरे प्रश्न हैं:

  1. कैसे जेनरिक और विवश बहुरूपता कर अनावश्यक subtyping करते हैं?

  2. यदि जेनेरिक और बाधित पॉलीमोर्फिज्म अनावश्यक बना देता है, तो स्कैला का उप-प्रकार क्यों होता है?

+2

आपको स्कालाज़ में रुचि हो सकती है, जो व्यापक रूप से बाध्य (उर्फ एड-होक) बहुरूपता का उपयोग करती है। स्कैला में टाइप अनुमान, हास्केल के रूप में कई स्थानों पर काम नहीं करता है, जो इसे प्रकार कक्षाओं को एन्कोड करने के लिए श्रमिक बना सकता है। लेकिन हम वैसे भी कोशिश करते हैं :) – retronym

उत्तर

6

ओलेग Kiselyov और राल्फ Lämmel के "Haskell's overlooked object system" हास्केल के लिए एक पुस्तकालय का प्रस्ताव है जो प्रकार कक्षाओं सहित Haskell की मौजूदा सुविधाओं का उपयोग कर एक ऑब्जेक्ट सिस्टम लागू करता है।

कागज (जोर मेरा) के "परिचय" अनुभाग से एक अंश:

इस विषय में रुचि बिल्कुल हास्केल शोधकर्ताओं और चिकित्सकों के लिए ही सीमित नहीं है के बाद से वहाँ एक मौलिक और अस्थिर सवाल यह है कि - एक सवाल है कि वर्तमान पत्र में संबोधित किया जाता है:

              प्रकार स्तरीय-घिरा है और उप-प्रकार बहुरूपता के बीच संबंध क्या है?

इस शोध के संदर्भ में, हम फाई बड़ी सफाई तकनीक और नवीनता (और जोरदार ढंग से) मौजूदा हास्केल भाषा के लिए अपने आप को प्रतिबंधित (हास्केल 98 और आम एक्सटेंशन जहां आवश्यक हो), यानी, कोई नया हास्केल विस्तार का प्रस्ताव किया जाना है। जैसा कि हम प्रमाणित करेंगे, यह प्रतिबंध पर्याप्त है, क्योंकि यह हमें उपरोक्त प्रश्न के लिए एक सार्थक और महत्वपूर्ण उत्तर देने की अनुमति देता है।

+0

यह वही है जो मैं 2 साल पहले ढूंढ रहा था। :-) – missingfaktor

+0

ओहहास्केल पर विकास की तरह लगता है अभी भी कुछ हद तक सक्रिय है: https://github.com/nkaretnikov/OOHaskell –

14

ठीक है अगर यह वास्तव में एक खुला प्रश्न है, तो परिभाषा के अनुसार हम # 1 का जवाब नहीं जानते हैं। डिज़ाइन रिक्त स्थान बहुत अलग हैं, और यह मेरे लिए स्पष्ट नहीं है कि आप कैसे सीमित पॉलीमोर्फिज्म में उप-टाइपिंग को सीधे एन्कोड कर सकते हैं। एन्कोडिंग प्रत्यक्ष है जब तर्क पॉलिमॉर्फिक हैं। उदाहरण के लिए,

foo :: (Num a) => a -> Bool 

के साथ एक Haskell समारोह के बराबर है, का कहना है:

Bool foo(Num x) 
एक OO भाषा में

। हालांकि यह स्पष्ट नहीं है कि कैसे एन्कोड करने के लिए:

// I will return some Num, but I'm not going to tell you what kind exactly 
Num bar(Bool x) 
विवश बहुरूपता में

, न ही यह कैसे एन्कोड करने के लिए स्पष्ट है:

-- I can return any kind of Num, *you* tell *me* what kind 
bar :: (Num a) => Bool -> a 
subtyping में

# 2 के लिए मेरा सबसे अच्छा अनुमान यह है कि स्कैला को जावा से बात करना है, और जावा टाइपिंग के बारे में बात करता है। और क्योंकि स्कैला में हर प्रकार की सिस्टम सुविधा होती है जिसे मनुष्य के लिए जाना जाता है क्योंकि ऐसा लगता है कि इसे ठंडा होने के लिए यह करना है। :- पी

+4

हास्केल में आप हमेशा डेटा को जोड़कर ओओ व्यवहार (अमूर्त ऑब्जेक्ट पर पॉइंटर लौट सकते हैं) प्राप्त कर सकते हैं 'डेटा ANum = forall a।(न्यू ए, न्यूकॉमर्स ए) => एनाम ए' – ony

+0

"मैं किसी भी प्रकार की संख्या वापस कर सकता हूं, * आप * बताएं * मुझे * किस प्रकार" संस्करण के बारे में 'नम बार (बूल एक्स, न्यूम फैक्ट्री एफ)' (बेशक कभी-कभी 'एफ'' द्वारा उत्पादित वास्तविक प्रकार से 'न्यू' तक कास्टिंग करने का कारण बनता है) – ony

+0

यदि रैंक -2 पॉलिमॉर्फिज्म की अनुमति है, तो आप "नम बार (बूल एक्स)" को "बूल -> (फोरल एन। एनएम एन" के रूप में व्यक्त कर सकते हैं। => एन -> ए) -> जावा में " – Martijn

5

2 आसान है: क्योंकि जावा (और जेवीएम बाइटकोड) में यह है। अगर हम जावा से स्कैला को उपयोगी रूप से कॉल करना चाहते हैं, तो हमें जावा इंटरफेस और कक्षाओं को विस्तारित करने की अनुमति देना है; और यदि स्कैला कक्षाओं को जेवीएम कक्षाओं (और इंटरफेस के लक्षण) में अनुवादित किया जाता है, तो हम उन्हें भी बढ़ा सकते हैं।

bar :: Bool -> exists a. Num a 
29

कैसे:

एक ही कारण है कि स्काला null :)

1 के रूप में है, तो आप भी

Num bar(Bool x) 

मामले एन्कोड करने के लिए अस्तित्व प्रकार की आवश्यकता है जेनेरिक और बाधित पॉलीमोर्फिज्म अनावश्यक उपनिवेश करते हैं?

यह ज्ञात नहीं है कि वे करते हैं। आप संदर्भ में स्लाइड डालें, तो मुझे लगता है कि तर्क वक्ता बनाने के लिए कोशिश कर रहा था कुछ इस तरह चला जाता है:

  • पुराने दिनों में, subtyping बहुरूपता का एक महत्वपूर्ण प्रकार प्रदान की है।

  • पुराने दिनों में, दूसरे देश में, अमूर्तता और टाइप पैरामीटर टाइप करें, जो कि एक महत्वपूर्ण प्रकार का बहुरूपता प्रदान करते हैं। इस तरह की मूल भूमि में पैरामीट्रिक पॉलिमॉर्फिज्म के रूप में जाना जाता है, लेकिन विदेशी देशों में इसे जेनेरिक कहा जाता है।

  • आधुनिक जेनेरिक बाधाओं को स्वीकार करते हैं, जिन्हें कभी-कभी "बाध्य पॉलीमोर्फिज्म" कहा जाता है, जो उपप्रकार बहुरूपता के समान चीजों को प्राप्त कर सकते हैं।

  • सबटाइपिंग में पर्याप्त सामान — विशेष रूप से है, आपको कॉन्वर्सिस और विरोधाभास के बारे में चिंता करने की ज़रूरत है। असहज प्रतिबंध, हेवीवेट नोटेशन, और कभी-कभी सीधे सुरक्षा उल्लंघनों (उदाहरण के लिए, एफिल) के साथ भाषाएं बढ़ती हैं।

खुला प्रश्न: शायद विवश पैरामीट्रिक बहुरूपी वही समस्या है कि खुश भविष्य में, हम पूरी तरह से उप-प्रकार बहुरूपता से छुटकारा पा सकते के लिए पर्याप्त हल करती है, और इसके साथ जब subtyping covariant है की बुरा सवाल है, contravariant, और invariant।

संबंधित मुद्दे