2012-01-08 4 views
11

में लागू अनुमान टाइप करें Damas-Hindley-Milner शैली प्रकार अनुमान के सी ++ में कोई कार्यान्वयन है, अधिमानतः आधुनिक सी ++ तकनीकों का उपयोग करना?सी ++

+1

एर्म ... क्या डमास-Hindley-मिलनर शैली प्रकार निष्कर्ष है? कोई लिंक अच्छा होगा। यह भी ध्यान रखें कि सी ++ 11 प्रकार अनुमान के लिए 'ऑटो' जोड़ता है, और 'टेम्पलेट की प्रकृति संदर्भ प्रकार हैं जो फ़ंक्शन पैरामीटर के रूप में उपयोग किए जाते हैं। – Xeo

+0

क्या आप "दामा-हिंडली-मिलनर शैली प्रकार अनुमान" क्या बता सकते हैं? मुझे यह गुगल करने की तरह महसूस नहीं होता है। –

+10

@ बेंजामिन लिंडले: मुझे कल्पना है कि यह एक ऐसी स्थिति है जहां आपको इसे देखना होगा, शायद आपके पास जवाब नहीं होगा, या तो ... –

उत्तर

1

मुझे संदेह है कि आपको बहुत भाग्य नहीं होगा; कार्यात्मक लोग जो इस सामान को लिखते हैं, आमतौर पर इसे C++ में नहीं करते हैं! आपके द्वारा जा सकने वाले अधिकांश कंपाइलरों का उपयोग स्वयं संकलित करने के लिए किया जाता है (उदाहरण के लिए ओकैमल, या जीएचसी के लिए)।

तो, अगर किसी ने खिलौना परियोजना के रूप में हिंडली-मिलनर किया है, तो शायद यह नेट पर नहीं है; अगर यह कंपाइलर का हिस्सा था, तो यह सी ++ में होने की संभावना नहीं है।

संभव चीजें हैं जो मन में आते हैं:

  • हास्केल के लिए Hugs सी में है; वहां कुछ सी स्रोत होंगे जो कहीं भी आप चाहते हैं, और हास्केल एक अच्छी परिचित चीनी है। हालांकि आप चाहते हैं कि सी ++ नहीं।
  • मुझे एफ # के बारे में कुछ भी पता नहीं है, लेकिन मुझे लगता है कि यह एचएम है, और यदि किसी ने आधुनिक तकनीकों के साथ सी ++ में वसा कार्यात्मक कंपाइलर लिखा है, तो यह शायद एमएस हो सकता है। स्पष्ट रूप से बंद स्रोत हालांकि।
12

यहाँ my implementation of Hindley-Milner type inference in C++11, Python code by Robert Smallshire के आधार पर, Scala code by Andrew Forrest, निकिता बोरिसोव और paper "Basic Polymorphic Typechecking" by Cardelli द्वारा पर्ल कोड है।

यह boost::variant और boost::apply_visitor का भारी उपयोग करता है।

+0

आपको संघ-खोज संचालन के लिए 'boost :: disjoint_sets' उपयोगी भी मिल सकता है। – max

0

हमारे यहां एक प्रकार का अनुमान इंजन है (https://github.com/ltcmelo/psychec)। हमारा दृष्टिकोण पॉटियर और रेमी द्वारा एचएम (एक्स) एल्गोरिदम के बाद लागू किया गया है, जिसमें बाधा पीढ़ी के लिए अलग-अलग चरणों और प्रकार का अनुमान ठीक से टाइप किया गया है। सीढ़ी पीढ़ी सी ++ में लागू की गई है, लेकिन हास्केल (माफ करना!) में टाइप रिज़ॉल्यूशन लागू किया गया है। कोड आंशिक रूप से उपलब्ध कोड पुनर्निर्माण के लिए एल्गोरिदम सी प्रोग्राम के लिए प्रकारों का अनुमान लगाता है। उपकरण ऑनलाइन उपलब्ध है: http://cuda.dcc.ufmg.br/psyche-c/। आप एक सी प्रोग्राम का हिस्सा दर्ज करते हैं, और यह टाइप घोषणाएं उत्पन्न करता है जो इसे संकलित करने के लिए पर्याप्त हैं।

सादर,

फर्नांडो