चौराहे और संघ प्रकार के साथ व्यावहारिक मुद्दे क्या हैं?


22

मैं सीखने के अनुभव के रूप में एक सरल रूप से टाइप की गई कार्यात्मक प्रोग्रामिंग भाषा डिजाइन कर रहा हूं।

ऐसा प्रतीत होता है कि मैंने जिस प्रकार की प्रणाली को अब तक लागू किया है (थोड़े अतिरिक्त काम के साथ) चौराहे और संघ प्रकारों को शामिल कर सकता है, जैसे आप कर सकते हैं:

  • <Union String Integer>
  • <Union Integer Foo>
  • ऊपर के दो प्रकार के चौराहे एक मैदान होगा Integer
  • दो प्रकारों का मिलन होगा <Union String Integer Foo>

तथ्य यह है कि यह संभव है, निश्चित रूप से जरूरी नहीं है कि यह एक अच्छा डिजाइन विचार है। विशेष रूप से, मैं कुछ हद तक अप्रभावित और / या ओवरलैप्स को संभालने की कार्यान्वयन कठिनाइयों के बारे में चिंतित हूं।

प्रकार प्रणाली में इस तरह की सुविधाओं को शामिल करने के पेशेवरों / विपक्ष क्या हैं?

जवाबों:


26

यहां कुछ बातें ध्यान रखने योग्य हैं:

  • यद्यपि हम आम तौर पर सोचते हैं कि हम जानते हैं कि सेट-थेरेटरी चौराहे और संघ से हमारा क्या तात्पर्य है, वास्तव में चौराहे और संघ प्रकार क्या हैं, इस पर कई अलग-अलग तरीके हैं । इसलिए, इससे पहले कि आप इसे लागू करें, इसे लागू करने के लायक है।
  • एक तत्व जो मुझे लगता है कि चौराहों और यूनियनों को समझने के लिए भयानक रूप से महत्वपूर्ण है, प्रकार शोधन की अवधारणा है , अनिवार्य रूप से यह विचार है कि एक कार्यक्रम में एक निश्चित आंतरिक "आच्छादन" है (उदाहरण के लिए, " फू एक पूर्णांक से पूर्णांक तक एक फ़ंक्शन है"), जो कर सकते हैं फिर अधिक सटीक गुणों को व्यक्त करने के लिए परिष्कृत किया जाना चाहिए (उदाहरण के लिए, " फू भी पूर्णांकों को पूर्णांक और विषम पूर्णांक से विषम पूर्णांक तक ले जाता है)"। हाथ में परिशोधन की अवधारणा के साथ, प्रमुख संपत्ति जो उत्पादों और रकमों से चौराहों और यूनियनों को अलग करती है, यह है कि दो प्रकार के चौराहे / संघ का गठन केवल तभी किया जा सकता है जब वे एक ही चापलूसी को परिष्कृत करते हैं। दूसरे शब्दों में, चौराहों और यूनियनों के प्रकार के गठन के नियमों को इस तरह व्यक्त किया जा सकता है (पढ़ें)SAS refines ") जबकि सामान्य उत्पादों और लिए गठन के नियम A
    SATASTASATASTA
    SATBSTABSATBS+TA+B
  • चूँकि चौराहों और यूनियनों का उपयोग किसी प्रोग्राम के रन-टाइम व्यवहार के बारे में अधिक सटीक दावे करने के लिए किया जा सकता है, इसलिए स्वाभाविक है कि टाइपिंग मूल्यांकन क्रम के प्रति संवेदनशील हो जाती है। उदाहरण के लिए, नीचे दिए गए कागजात (2) और (4) में बताया गया है कि क्यों "स्पष्ट" (और काफी मानक) चौराहों और यूनियनों के लिए टाइपिंग और उप-नियम बनाना वास्तव में एमएल जैसी भाषाओं (दुष्प्रभाव और गैर की उपस्थिति के कारण) के लिए निराधार हैं समापन)। आपको चेतावनी दी गई है!
  • इसी तरह के कारणों के लिए, वैश्विक प्रकार का अनुमान आम तौर पर अव्यावहारिक या अवांछनीय हो जाता है। दरअसल, "प्रिंसिपल प्रकार" की पूरी अवधारणा यकीनन, एक लाल हेरिंग है के बाद से एक समारोह के कई अलग अलग गुण है जो अपने उद्देश्य का के लिए अप्रासंगिक हैं को संतुष्ट कर सकते हैं (जैसे, " foo 7 से अधिक पूर्णांकों को प्रधानमंत्री पूर्णांक लेता है")। इसके बजाय, चौराहों और यूनियनों के व्यावहारिक दृष्टिकोण (देखें (3) , (4) ) आम तौर पर अनुमान और जाँच के संयोजन पर आधारित होते हैं।

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

एक संक्षिप्त पठन सूची:

  1. जॉन सी। रेनॉल्ड्स द्वारा प्रोग्रामिंग लैंग्वेज फोर्सिथ का डिज़ाइन
  2. रोवन डेविस और फ्रैंक Pfenning द्वारा अंतर्ग्रहण प्रकार और कम्प्यूटेशनल प्रभाव
  3. रोवन डेविस (शोध प्रबंध) द्वारा प्रैक्टिकल शोधन-प्रकार की जाँच
  4. Tridirectional Typechecking यहोशू Dunfield और फ्रैंक पफेनिंग द्वारा

शानदार जवाब, बहुत धन्यवाद। लिंक विशेष रूप से उपयोगी और ज्ञानवर्धक रहे हैं - इसलिए मुझे सही दिशाओं में इंगित करने के लिए धन्यवाद!
मिकेरा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.