उत्तर

6

समस्या के साथ है मूल्य प्रतिनिधित्व।

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

यदि आपके पास यह धारणा है, तो आप प्रत्येक पॉलिमॉर्फिक फ़ंक्शन को एक बार संकलित कर सकते हैं, और इसे सभी प्रकार के सभी तर्कों पर उपयोग कर सकते हैं: उनके पास संकलित फ़ंक्शन द्वारा प्रस्तुत प्रतिनिधित्व है।

अब कहें कि आप अन्य प्रस्तुतियों के साथ प्रकार फेंकते हैं, उदाहरण के लिए। ढेर पर कई निरंतर शब्द। आप अब अपने एकल संकलित फ़ंक्शन का उपयोग नहीं कर सकते हैं, क्योंकि यह एक शब्द की अपेक्षा करेगा, इसलिए कॉलिंग सम्मेलन सही नहीं है। कुछ टूटा है।

इस तरह के रूप में विभिन्न तरीकों से ठीक किया जा सकता:

उनका प्रतिनिधित्व बारे में कुछ जानकारी मानों के साथ
  • पास (आप क्रम के एक प्रकार के "प्रकार" जानकारी होने के लिए इस जानकारी का विचार कर सकते हैं, लेकिन वास्तव में आपको पूर्ण प्रकार की जानकारी की आवश्यकता नहीं है, केवल प्रतिनिधित्व के बारे में कुछ जानकारी); उदाहरण के लिए TILT कंपाइलर ने उदाहरण के लिए

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

  • "एक-शब्द प्रकार", "टुपल प्रकार" को अलग करने के लिए एक प्रकार की प्रणाली का उपयोग करके बहुरूपता प्रतिबंधित करें। सामान्य polymorphism के बजाय "के लिए सभी टाइप करें," आपके पास इस प्रकार के सभी प्रकार के लिए एक सापेक्ष संस्करण होगा "...। यह प्रोग्रामर को स्थिर रूप से तर्क देने की अनुमति देता है कि कौन सा फ़ंक्शन स्वीकार कर सकता है कि किस प्रकार के तर्क ("ओउ, यह फ़ंक्शन पॉलिमॉर्फिक है, इसलिए मुझे यहां मेरे मूल्य प्रकार को बॉक्स करना होगा") यह उम्मीद करने के बजाय कि कंपाइलर को सही दबाव मिलेगा, लेकिन यह भी प्रकार प्रणाली को भारी बनाता है: आप एकरूपता के भ्रम को सुरक्षित नहीं करते हैं।

संक्षेप में, संयुक्त अमीर डेटा प्रतिनिधित्व विकल्पों के साथ बहुरूपता (के कुछ फार्म) संभव है, लेकिन वर्दी प्रतिनिधित्व के मामले में तुलना में बहुत कठिन है।

+0

पॉलिमॉर्फिक रिकर्सन के साथ वैल्यू प्रकार समाधान # 2 के लिए समस्याग्रस्त है क्योंकि आपको कोड के असीमित कई संस्करणों को संकलित करने की आवश्यकता हो सकती है। ऐसे मामलों का पता लगाना संभव हो सकता है? – Jules

+0

प्रैक्टिस में आप वैसे भी रिकर्सिव कॉल के कारण आकार में असंबद्ध होने वाले मूल्य प्रकारों के साथ अपना स्टैक भरना नहीं चाहेंगे।मेरा अंतर्ज्ञान यह होगा कि कम से कम एक सूचक के माध्यम से आकार (और ऊपर मुक्केबाजी) पर मजबूती से एक स्थिर सीमा डालने या कम से कम एक सूचक के माध्यम से मजबूर करने के लिए मजबूर करना आपके मामलों में पूर्ण जेआईटी जोड़ने से अधिक उचित समाधान दोनों है। – gasche

0

नहीं, यह गलत है। आप "उच्च क्रम बहुरूपता" (पैरामीटर जो सभी प्रकारों पर समान रूप से व्यवहार करते हैं) प्राप्त कर सकते हैं या तो पैरामीटर प्रकार या तो object टाइप करें (मूल्य प्रकार स्वचालित रूप से ऑब्जेक्ट्स में "बॉक्स किए गए" हो जाएंगे)

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