स्पष्ट बनाम स्पष्ट घटाव


18

इस पृष्ठ का दावा है कि

कई भाषाओं में निहित सबटाइपिंग (संरचनात्मक समतुल्यता) का उपयोग नहीं किया जाता है, स्पष्ट / घोषित उपप्रकार (घोषणा समतुल्यता) को प्राथमिकता देना

मैंने ज्यादातर प्रोग्रामिंग लैंग्वेज का इस्तेमाल किया है जो स्पष्ट सबटाइपिंग का उपयोग करती है । जैसा कि ऊपर नोटों में वर्णित है, अंतर्निहित सबटाइपिंग के क्या फायदे हैं।


1
एफएक्यू से, इस एक्सचेंज के दायरे में: "इस क्षेत्र में काम को अक्सर गणितीय तकनीक और कठोरता पर जोर दिया जाता है।" मैं नीच हूं क्योंकि मुझे इस प्रश्न के उत्तर में कठोरता की कोई गुंजाइश नहीं दिखती।
डेविड एप्पस्टीन

6
अफसोस की बात है, इस सवाल का जवाब देने में कठोरता के लिए बहुत अधिक गुंजाइश है जितना आप शुरू में उम्मीद कर सकते हैं। बहुत से प्रख्यात लोगों ने 90 के दशक की कुश्ती में बहुत कुछ जला दिया था, जो स्पष्ट रूप से घटाव के बारे में तुच्छ सवालों के साथ था। यह एक बहुत ही खराब प्रयास-से-इनाम अनुपात वाला क्षेत्र है, दुर्भाग्य से।
नील कृष्णस्वामी

6
हाँ, इस सवाल का जवाब देने में गणित और कठोरता के लिए बहुत जगह है, या कम से कम गणितीय रूप से यह समझाने के लिए कि निहितार्थ क्या है । मैं प्रयास-से-इनाम अनुपात के बारे में निश्चित नहीं हूं।
नोआम ज़िलबर्गर

1
मुझे शायद यह कहना चाहिए था कि यह "बहुत कठिन" था, क्योंकि प्रतिबिंब के बाद मुझे एहसास हुआ कि मुझे उत्तरों में बहुत दिलचस्पी है।
नील कृष्णस्वामी

1
ठीक है, मैं आश्वस्त हूं। मैं अपने डाउनवोट को हटा दूंगा लेकिन सिस्टम मुझे जाने नहीं देगा।
डेविड एप्पस्टीन

जवाबों:


19

संक्षिप्त उत्तर "मौजूदा कोड के अतिरिक्त गुणों को सत्यापित करने के लिए" है। लंबे समय तक जवाब इस प्रकार है।

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

एक संरचनात्मक उपप्रकार संबंध ए की व्याख्या करने में मुख्य परिचालन अंतर है <: बी यह है कि क्या यह एक वास्तविक बलात्कार के साथ देखा जाता है (रनटाइम / कंपाइलटाइम) कम्प्यूटेशनल सामग्री के साथ, या क्या यह पहचान के सिद्धांत द्वारा देखा जा सकता है। यदि पूर्व, महत्वपूर्ण सैद्धांतिक संपत्ति को धारण करना है, तो "जुटना" है, अर्थात, यदि यह दिखाने के कई तरीके हैं कि A, B का एक सबस्ट्रक्चरल उपप्रकार है, तो साथ आने वाले प्रत्येक सहकर्मी के पास समान कम्प्यूटेशनल सामग्री होनी चाहिए।

आपके द्वारा दिया गया लिंक मन में संरचनात्मक रूप से घटने की दूसरी व्याख्या प्रतीत होता है, जहाँ A <: B को पहचान के सिद्धांत के द्वारा देखा जा सकता है। इसे कभी-कभी उप-व्याख्या की "उप-व्याख्या" कहा जाता है, भोले विचार को लेते हुए कि एक प्रकार मानों के एक समूह का प्रतिनिधित्व करता है, और इसलिए ए <: बी सिर्फ मामले में टाइप ए का प्रत्येक मूल्य भी प्रकार बी का एक मूल्य है। कभी-कभी "शोधन टंकण" कहा जाता है, और मूल प्रेरणा के लिए पढ़ने के लिए एक अच्छा पेपर है फ्रीमैन और पीफेनिंग के शोधन के प्रकार एमएल के लिए । F # में अधिक हाल के अवतार के लिए, आप बेंगस्टन एट अल, सुरक्षित कार्यान्वयन के लिए शोधन प्रकार पढ़ सकते हैं । मूल विचार एक मौजूदा प्रोग्रामिंग भाषा को लेना है जो पहले से ही प्रकार हो सकता है (या नहीं भी हो सकता है) लेकिन जिसमें प्रकार सभी की गारंटी नहीं देते हैं बहुत (जैसे, केवल स्मृति सुरक्षा), और प्रोग्रामों के सबसेट का चयन करने वाले प्रकारों की एक दूसरी परत पर विचार करें अतिरिक्त, अधिक सटीक गुण।

(अब, मैं तर्क दूंगा कि उप-योग की इस व्याख्या के पीछे का गणितीय सिद्धांत अभी भी उतना अच्छा नहीं समझा जा सकता है जितना इसे होना चाहिए, और शायद ऐसा इसलिए है क्योंकि इसके उपयोग की व्यापक रूप से सराहना नहीं की जानी चाहिए क्योंकि एक समस्या यह है कि "सेट"। मूल्यों की "प्रकार की व्याख्या बहुत भोली है, और इसलिए कभी-कभी इसे परिष्कृत करने के बजाय छोड़ दिया जाता है। एक अन्य तर्क के लिए कि उपप्रकार की यह व्याख्या अधिक गणितीय ध्यान देने योग्य है, पॉल टेलर के सबस्पेस इन एब्सट्रैक्ट स्टोन ड्यूलिटी का परिचय पढ़ें ।)


हाय नोआम, अच्छा जवाब! मुझे लगता है कि नाममात्र उप-ला को एक OO जोड़ देगा मूल रूप से गैर-पहचान ज़ब्ती के एक वर्ग को परिभाषित करने का एक तरीका है जो फिर भी बिना-ऑप्स द्वारा महसूस किया जाता है। यही है, विरासत द्वारा प्रेरित वस्तुओं की चौड़ाई को औपचारिक रूप से घटाने के लिए एक गैर-पहचान ज़बरदस्ती शामिल है (जैसे, एक ज़बरदस्ती मतलब है कि आप C को फेंक देते हैं ), लेकिन स्मृति में आपके द्वारा रिकॉर्ड अनिवार्य रूप से रखना दोनों प्रकार के और बी घटकों को प्रोजेक्ट करने के लिए एक ही बाइनरी कोड का उपयोग कर सकते हैं । ×बी×सी<:×बीसीबी
नील कृष्णस्वामी

1
इष्टतम मेमोरी लेआउट का पता लगाने के लिए यह ऑप्टिमाइज़र का काम है, इसलिए जो पहचान हैं, वे वास्तव में अनुकूलन का परिणाम होना चाहिए।
बॉर्न बाउर

2
इसलिए केवल मेरे उत्तर के संबंध में, एक परिष्कृत टाइपिंग की व्याख्या में, मेरे जवाब के साथ लेडी की टिप्पणी को स्पष्ट करने के लिए, सबसिडी रिश्तों को हमेशा परिभाषा द्वारा पहचान के बल पर देखा जाता है , क्योंकि शोधन प्रकार कोई अतिरिक्त कम्प्यूटेशनल सामग्री नहीं रखते हैं। दूसरे शब्दों में, यदि A और B एक प्रकार के मानों के दो परिशोधन ("सबसेट" / "गुण") हैं, तो A <: B का अर्थ है कि X में प्रत्येक मान x के लिए, यदि x: A तब भी x: B हो। इस तरह के एक बयान को सत्यापित या गलत ठहराया जा सकता है, लेकिन रनटाइम पर इसका कोई प्रभाव नहीं पड़ता है, क्योंकि सबूत: एक्स: ए और एक्स: बी रनटाइम पर मौजूद नहीं हैं।
नोआम ज़िलबर्गर

1
@ नोम: मैं सहमत हूं, लेकिन केवल जब हम एक ही भाषा के रूपक के बारे में बात कर रहे हैं, और यह नहीं कि हम संकलन के बारे में बात कर रहे हैं। आइडेंटिटी कॉर्किंस को उन प्रक्रियाओं द्वारा महसूस किया जा सकता है जो बहुत काम करते हैं, और गैर-पहचान कॉर्किंस को उन प्रक्रियाओं द्वारा महसूस किया जा सकता है जो कुछ भी नहीं करते हैं। लगातार, मान लीजिए कि हमारे पास एक प्रकार , और एक शोधन { एक्स : एनएन । तब हम एक एकल अनबॉक्स्ड शब्द के साथ परिशोधन के तत्वों को लागू कर सकते थे, भले ही पूर्ण प्रकार को प्रतिनिधित्व करने के लिए स्मृति आवंटन की आवश्यकता हो। यहाँ की पहचान को असली गणना द्वारा महसूस किया जाना चाहिए। {एक्स:एन|एक्स<232}
नील कृष्णस्वामी

3
@ नील: मैं इसे दो चरणों में विभाजित करूंगा, 1. अभिकलन लागू करें - से इसकी पहचान के लिए नि: शुल्क पहचान बलवा { एक्स : एन | x < 2 32 } , फिर 2., N से आंशिक रूप से परिभाषित निर्देशांक (पूरी तरह से अलग) एकल अनबॉक्ड शब्दों के प्रकार पर लागू करें, जो शोधन पर पूरी तरह से परिभाषित है { x : N | x < 2 32 } । हो सकता है कि यह बालों को विभाजित कर रहा हो ... लेकिन किसी भी मामले में यह दिखाने के लिए कि मैंने क्या कहा था "कि उपप्रकार की इस व्याख्या के पीछे गणितीय सिद्धांत अभी भी उतना समझ में नहीं आया है जितना कि यह होना चाहिए" :)एन{एक्स:एन|एक्स<232}एन{एक्स:एन|एक्स<232}
नोआम ज़िलबर्गर

4

यह उत्तर नोआम के उत्कृष्ट उत्तर के लिए न्यूनतम पूरक है। ब्याज का एक डेटा बिंदु C ++ अवधारणाओं का भाग्य है, जो नाममात्र और संरचनात्मक धारणाओं को एकजुट करने के प्रयास पर पाया गया।

प्रासंगिक चर्चा के बहुत से लिंक के साथ यहाँ एक उत्कृष्ट लेखन है: http://bartoszmilewski.wordpress.com/2010/06/24/c-concepts-a-postmortem/

हालाँकि, उपरोक्त राइटअप किसी भी गहराई में नाममात्र बनाम संरचनात्मक मुद्दे पर चर्चा नहीं करता है। यहाँ एक और राइटअप है, जो करता है: http://nerdland.net/2009/07/alas-concepts-we-hardly-knn-/

दोनों प्रमुख कागज बज़्ने स्ट्रॉस्ट्रुप के "सरलता से उपयोग की अवधारणा" है: http://www.open-std.org/jtc1/sc22/wg21/docs/papers-2009/n2906.pdf , जो व्यावहारिक रूप में जाता है कुछ गहराई में मुद्दों का सामना करना पड़ा।

समग्र रूप से, चर्चा कठोर से अधिक व्यावहारिक है। हालाँकि, यह इन मुद्दों में शामिल ट्रेडऑफ के प्रकार में एक अच्छी अंतर्दृष्टि देता है, विशेष रूप से एक बड़ी मौजूदा भाषा के संदर्भ में।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.