"प्रकार और प्रोग्रामिंग भाषाएं" पढ़ना, मैं बंद करने और रिकॉर्ड उपखंड (अध्याय 18) का उपयोग करके ऑब्जेक्ट कार्यान्वयन से प्रभावित हुआ। क्या कोई विशेष कारण है कि ओकैमल रिकॉर्ड सबटाइपिंग का समर्थन नहीं करता है (हालांकि मुझे पता है कि ऑब्जेक्ट्स करते हैं)? असल में, मुझे इसका समर्थन करने वाली कोई भी भाषा नहीं मिल रही है।OCaml रिकॉर्ड उप-समर्थन का समर्थन क्यों नहीं करता है?
उत्तर
तकनीकी रूप से, ओकैमल की वस्तुएं सामान्य अर्थ में सबटाइपिंग का समर्थन नहीं करती हैं, लेकिन पंक्ति बहुरूपता। सबटाइपिंग पर पंक्ति polymorphism के कई फायदे हैं, विशेष रूप से यह दोनों अधिक अभिव्यक्तिपूर्ण है और प्रकार अनुमान के साथ बहुत बेहतर काम करता है (उप प्रकार और टाइप अनुमान अच्छी तरह से मिश्रण नहीं है)।
सभी अभिलेखों के लिए या तो संरचनात्मक उपप्रकार या पंक्ति बहुरूपता का उपयोग करने वाली प्राथमिक समस्या यह है कि इसे एक अधिक शामिल रनटाइम कार्यान्वयन की आवश्यकता होती है, और इसके परिणामस्वरूप, यह भी अधिक महंगा है। जहां साधारण रिकॉर्ड्स को सादे tuples में छोटे पैमाने पर अनुवादित किया जा सकता है, फ़ील्ड एक्सेस केवल इंडेक्सिंग के साथ, स्ट्रक्चरल सबटाइपिंग या पंक्ति पॉलीमोर्फिज्म को किसी ऑब्जेक्ट को "स्लाइस" पारदर्शी रूप से "स्लाइस" करने की क्षमता की आवश्यकता होती है, यानी यादृच्छिक फ़ील्ड को हटाए गए सुपरटेप के तहत इसे देखें। आम तौर पर, इसके लिए हैशिंग (जैसे ओकैमल्स ऑब्जेक्ट्स), या सबूत तकनीकों को पारित करने के लिए फ़ील्ड लुकअप की आवश्यकता होती है, जहां किसी फ़ंक्शन या उसके किसी भी कॉलिज़ द्वारा उपयोग किए जाने वाले प्रत्येक फ़ील्ड की अनुक्रमणिका को एक छिपी हुई तर्क के रूप में पास किया जाना चाहिए वास्तविक रिकॉर्ड (उदाहरण के लिए, एसएमएल # यही कर रहा है)।
किसी भी मामले में, ओकैम में पॉलिमॉर्फिक रिकॉर्ड हैं, उन्हें केवल ऑब्जेक्ट कहा जाता है। लेकिन अगर आपको इसकी आवश्यकता नहीं है तो आप उनके चारों ओर सभी वर्ग गड़बड़ी को अनदेखा कर सकते हैं।
हां, कक्षा गड़बड़ मुझे क्या बंद कर दिया था। मैं ओकैमल के लिए नया हूं, लेकिन मैं इसके ऑब्जेक्ट सिस्टम के बारे में और जानने के लिए उत्सुक हूं। वैसे भी, आपके उत्तर के लिए धन्यवाद! –
रिकॉर्ड उपशीर्षक टाइपिंग बिंदु पर काफी खतरनाक है।
मान लें कि आपके पास तीन फ़ील्ड के साथ एक रिकॉर्ड है: ए, बी और सी। और आप केवल दो फ़ील्ड के साथ एक रिकॉर्ड बनाना चाहते हैं: ए और सी। संकलक यह नहीं जानता कि आप किस प्रकार का उपयोग कर रहे हैं जब तक कि वह पूरे रिकॉर्ड को पूरा नहीं कर लेता है, और अंत में, अगर आप कोई गलती करते हैं तो आपकी मदद नहीं कर सकते: उदाहरण के लिए आप बी फ़ील्ड भूल गए हैं। मैं पूरी तरह से सहमत हूं कि इस दृष्टिकोण का मुकाबला प्रतिस्पर्धात्मक है, लेकिन मुझे लगता है कि ओकंपल लिखने वाले लोग सोचते हैं।
इसे इंगित करने के लिए धन्यवाद। मैं ऊपर उठूंगा, लेकिन मेरी प्रतिष्ठा बहुत कम है;) –
हम्म, मुझे काफी समझ में नहीं आता है। सबटाइपिंग का मतलब है कि आप उन स्थानों पर 3-फ़ील्ड रिकॉर्ड का उपयोग कर सकते हैं जो 2-फ़ील्ड रिकॉर्ड की अपेक्षा करते हैं। लेकिन आपके उदाहरण में, आप 2-फ़ील्ड रिकॉर्ड (संभवतः गलती से) बनाते हैं। उप प्रकार के साथ भी, कंपाइलर आपको केवल उन्हीं स्थानों पर इसका उपयोग करने की अनुमति देगा जो वास्तव में 2 फ़ील्ड (या कम) की अपेक्षा करते हैं। लेकिन यह ठीक है, क्योंकि वे स्थान कभी भी आपके तीसरे क्षेत्र को नहीं देख पाएंगे। – max
- 1. जावा समर्थन और ऑटोबॉक्सिंग का समर्थन क्यों नहीं करता है?
- 2. जीसीसी समर्थन नग्न कार्यों का समर्थन क्यों नहीं करता है?
- 3. auto_ptr का समर्थन क्यों नहीं करता है -> *()
- 4. XmlSerializer शब्दकोश का समर्थन क्यों नहीं करता है?
- 5. मेरा आईई 9 कैनवास का समर्थन क्यों नहीं करता है?
- 6. क्यों std :: queue स्पष्ट() फ़ंक्शन का समर्थन नहीं करता है?
- 7. जीसीसी का टर्नरी एक्सटेंशन समर्थन असाइनमेंट क्यों नहीं करता है?
- 8. जावा सूची इंटरफ़ेस getLast() का समर्थन क्यों नहीं करता है?
- 9. एंटिटी फ्रेमवर्क ओडीबीसी का समर्थन क्यों नहीं करता है?
- 10. कार्थेज आईओएस 7 का समर्थन क्यों नहीं करता है?
- 11. `getattr` लगातार गुण पुनर्प्राप्ति का समर्थन क्यों नहीं करता है?
- 12. एफ # नेस्टेड कक्षाओं का समर्थन क्यों नहीं करता है?
- 13. आईआईएस क्यों चंक ट्रांसफर एन्कोडिंग का समर्थन नहीं करता है?
- 14. एसक्यूएल सर्वर सीई वर्चर्स का समर्थन क्यों नहीं करता है?
- 15. पर्यवेक्षण चयन क्यों बड़े बदलावों का समर्थन नहीं करता है?
- 16. हास्केल का डेटा क्यों नहीं है। समर्थन अनंत सेट का समर्थन करता है?
- 17. माइक्रोसॉफ्ट.NETCore.App का समर्थन netstandard1.6 क्यों नहीं है?
- 18. xcode4 पर्सफोर्स का समर्थन नहीं करता है?
- 19. विम यूनिकोड का समर्थन नहीं करता है?
- 20. ocaml
- 21. jQuery इवेंट मॉडल इवेंट कैप्चर का समर्थन क्यों नहीं करता है और केवल इवेंट बबलिंग का समर्थन करता है
- 22. दो दो रिकॉर्ड के क्षेत्र OCaml
- 23. OCaml
- 24. सी ++ 11 अज्ञात structs का समर्थन क्यों नहीं करता है, जबकि सी 11 करता है?
- 25. WPF क्यों C++ का समर्थन नहीं करता है। नेट - WinForms जिस तरह से करता है?
- 26. Ocaml
- 27. जावा varargs समर्थन संग्रह क्यों नहीं करता है?
- 28. जड़ समर्थन विशेषता ऑब्जेक्ट अपस्टिंग क्यों नहीं करता है?
- 29. mxml समर्थन घटक कन्स्ट्रक्टर क्यों नहीं करता है?
- 30. (वस्तु #inspect का समर्थन नहीं करता)
एसएमएल # में रिकॉर्ड सबटाइपिंग है। ओकैमल की ऑब्जेक्ट्स सबटाइपिंग के साथ रिकॉर्ड हैं। संरचनात्मक उपप्रकार शक्तिशाली है, लेकिन इसकी प्रकार की त्रुटियां अक्सर गूढ़ होती हैं। तो ओकैमल उपयोगकर्ता सामान्य रूप से सबटाइपिंग के बिना सरल रिकॉर्ड पसंद करते हैं। – camlspotter
एसएमएल # को इंगित करने के लिए धन्यवाद! एसएमएल # में रिकॉर्ड सबटाइपिंग और ओकैमल में ऑब्जेक्ट स्ट्रक्चरल टाइपिंग के बीच कोई अंतर है? –