प्रकार अनुमान क्या है?
ऐतिहासिक रूप से, प्रकार निष्कर्ष (या प्रकार पुनर्निर्माण) का मतलब है कि एक कार्यक्रम में सभी प्रकार अनिवार्य रूप से किसी भी स्पष्ट प्रकार एनोटेशन की आवश्यकता के बिना प्राप्त किया जा सकता। हालांकि, हाल के वर्षों में, यह प्रोग्रामिंग भाषा मुख्यधारा में "प्रकार अनुमान" के रूप में नीचे-प्रकार के प्रकार के कटौती के सबसे छोटे रूपों को लेबल करने के लिए प्रचलित हो गया है (उदाहरण के लिए, नई auto
सी ++ 11 की घोषणा)। इसलिए लोगों ने "वास्तविक" चीज़ को संदर्भित करने के लिए "पूर्ण" जोड़ना शुरू कर दिया है।
पूर्ण प्रकार अनुमान है?
एक व्यापक स्पेक्ट्रम है कि एक भाषा किस प्रकार की भाषा का अनुमान लगा सकती है, और व्यावहारिक रूप से, लगभग कोई भी भाषा सख्ती से समझ में "पूर्ण" प्रकार अनुमान का समर्थन नहीं करती है (कोर एमएल एकमात्र उदाहरण है)। लेकिन मुख्य विशिष्ट कारक यह है कि क्या प्रकार बाइंडिंग के लिए प्राप्त किए जा सकते हैं जिनके पास विशेष रूप से — से जुड़ी "परिभाषा" नहीं है, कार्यों के पैरामीटर। यदि आप लिख सकते हैं, कहें,
f(x) = x + 1
और टाइप सिस्टम उस एफ को बताता है उदा। इंट → इंट टाइप किया गया है, तो इस प्रकार की अनुमान को कॉल करना समझ में आता है। (टी) टी → स्वचालित रूप से; इसके अलावा, हम के बारे में बहुरूपी प्रकार निष्कर्ष जब बात करते हैं, उदाहरण के लिए,
g(x) = x
सामान्य प्रकार & forall असाइन किया गया है।
टाइप अनुमान का आविष्कार आसानी से टाइप किए गए लैम्ब्डा कैलकुस के संदर्भ में किया गया था, और पॉलिमॉर्फिक प्रकार अनुमान (उर्फ हिंडली/मिलनर प्रकार अनुमान, 1 9 70 के दशक में आविष्कार) एमएल परिवार के भाषाओं की प्रसिद्धि का दावा है (मानक एमएल , ओकैमल, और तर्कसंगत हास्केल)।
पूर्ण प्रकार की अनुमान की सीमाएं क्या हैं?
कोर एमएल में "पूर्ण" पॉलिमॉर्फिक प्रकार अनुमान की लक्जरी है। लेकिन यह अपने प्रकार के सिस्टम में बहुरूपता की कुछ सीमाओं पर निर्भर करता है। विशेष रूप से, केवल परिभाषाएं सामान्य हो सकती हैं, कार्य तर्क नहीं। यही है,
id(x) = x;
id(5);
id(True)
ठीक काम करता है, क्योंकि id
बहुरूपी प्रकार दिया जा सकता है जब परिभाषा जाना जाता है। लेकिन
f(id) = (id(5); id(True))
प्रकार एमएल में जांच नहीं करता, क्योंकि id
एक समारोह तर्क के रूप में बहुरूपी नहीं हो सकता।दूसरे शब्दों में, टाइप सिस्टम पॉलिमॉर्फिक प्रकारों को और इसके लिए अनुमति देता है; (टी) टी → टी, लेकिन तथाकथित उच्च-रैंक पॉलिमॉर्फिक प्रकार (& forall; (टी) टी → टी) → बूल, जहां पॉलिमॉर्फिक मानों का उपयोग किया जाता है एक प्रथम श्रेणी के तरीके में (जो, स्पष्ट होने के लिए, यहां तक कि बहुत कम स्पष्ट रूप से टाइप की जाने वाली भाषाएं भी अनुमति देते हैं)।
पॉलिमॉर्फिक लैम्ब्डा कैलकुस (जिसे "सिस्टम एफ" भी कहा जाता है), जिसे स्पष्ट रूप से टाइप किया गया है, बाद वाले को अनुमति देता है। लेकिन यह एक मानक परिणाम प्रकार सिद्धांत में है जो पूर्ण सिस्टम एफ के लिए पुनर्निर्माण टाइप अपरिहार्य है। हिंडली/मिलनर थोड़ा कम अभिव्यक्तिपूर्ण प्रकार प्रणाली का मीठा स्थान हिट करता है जिसके लिए पुनर्निर्माण अभी भी निर्णायक है।
अधिक उन्नत प्रकार की सिस्टम विशेषताएं हैं जो पूर्ण प्रकार के पुनर्निर्माण को भी निर्विवाद बनाती हैं। और ऐसे कुछ भी हैं जो इसे निर्णायक रखते हैं लेकिन फिर भी इसे अक्षम बनाते हैं, उदा। विज्ञापन-हाक ओवरलोडिंग या सबटाइपिंग की उपस्थिति, क्योंकि इससे संयोजक विस्फोट होता है।
पायथन और पर्ल दिमाग में आते हैं। वे संकलित भाषा नहीं हैं, लेकिन यह शायद ही प्रासंगिक है। ऐसी परिस्थितियां हैं जहां टाइप अनुमान डीडब्ल्यूआईएम नहीं है - मेरे अनुभव में पाइथन थोड़ा सा भयावह है, और पर्ल थोड़ा आराम से है। – tripleee
पायथन और पर्ल गतिशील रूप से टाइप की गई प्रोग्रामिंग भाषाएं हैं, प्रकार * रन-टाइम * पर मान/वर्रों के लिए बाध्य हैं, जहां मैं भाषा के बारे में पूछ रहा हूं जहां संकलन-समय पर प्रकार स्थापित किए गए हैं * स्थिर रूप से टाइप किए गए, पूरी तरह से टाइप-अनुमानित * भाषा – fedvasu
क्या आपने http://en.wikipedia.org/wiki/Type_inference पढ़ने का प्रयास किया था? साथ ही पूरी तरह से अनुमानित मतलब क्या है? – Euphoric