2012-06-27 24 views
9

सी ++ मेटाप्रोग्रामिंग कार्यात्मक है: क्या किसी भी कार्यात्मक प्रोग्रामिंग भाषा (जैसे हास्केल) के तुलनीय या कुछ कहां से तुलना करने योग्य है?सी ++/बूस्ट एमपीएल: संरचना कोड इसी प्रकार हैस्केल की चलो, जहां,

मैं बूस्ट :: एमपीएल का उपयोग कर रहा हूं लेकिन लंबे समय तक मेटाफंक्शन के लिए और अधिक संरचना करना चाहता हूं। कई कार्यों में विभाजित करना ठीक है लेकिन मैं कुछ मामलों में चलो/कहां पसंद करूंगा।

+0

एक बिंदु है जहां सी बंद हो जाता है ++ उपयोगी रिटर्न दे रही है, खासकर जब यह भविष्य संगतता और रखरखाव के लिए आता है में और अधिक टेम्पलेट जादू जूता पहनने का साधन करने की कोशिश कर रहे आता है। क्या आपने एक तेज कार्यात्मक भाषा में अधिक कोड लिखने पर विचार किया है जो सी/सी ++ से कॉल करने योग्य पुस्तकालय उत्पन्न कर सकता है? (ओकैमल स्प्रिंग्स दिमाग में) – Rook

+1

नहीं, मैंने यह नहीं माना है। मैं मेटा प्रोग्रामिंग का उपयोग कर रहा हूं क्योंकि मुझे संकलन समय पर कुछ करने की ज़रूरत है, न कि क्योंकि मैं कार्यात्मक कोड लिखना चाहता हूं। कोड के मेरे टुकड़े उस जटिल नहीं हैं। मैंने सोचा कि क्या मैंने 30-लाइन-मेटाफंक्शन में तीन बार एक ही फ़ंक्शन एप्लिकेशन का उपयोग किया है, तो कुछ संरचना का उपयोग करना अच्छा होगा। – user1034081

+0

सी ++ 11 में, आप टेम्पलेट्स के बजाय 'constexpr' के साथ बहुत संकलन-समय प्रसंस्करण कर सकते हैं। – leftaroundabout

उत्तर

2

एमपीएल स्वयं let खंडों का समर्थन नहीं करता है लेकिन इसके शीर्ष पर बनाए गए कुछ पुस्तकालयों में से कुछ करते हैं। एक उदाहरण metamonad है। जैसा कि नाम से पता चलता है कि यह कुछ अन्य उच्च स्तरीय कार्यात्मक अवधारणाओं (monads) का भी समर्थन करता है। एक बड़ी कमी यह है कि metamonad बूस्ट वितरण का आधिकारिक हिस्सा नहीं है।

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

+0

मुझे उस पुस्तकालय को इंगित करने के लिए धन्यवाद। ऐसा लगता है कि मैं जो कुछ भी खोज रहा हूं, मुझे अभी तक पता नहीं है, अगर मैं इसका उपयोग करूंगा। अतिरिक्त पुस्तकालय, जादू की तरह दिखता है, ... – user1034081

+1

@ user1034081 एक एमपीएल उपयोगकर्ता जादू के बारे में शिकायत करता है;) – pmr

1

बूस्ट। फोएनिक्स में let नामक एक निर्माण है जो आपको उच्च क्रम फ़ंक्शन संदर्भ में स्थानीय चर घोषित करने की अनुमति देता है। मुझे लगता है कि यह उच्च स्तर के रूप में है, हालांकि यह मिलता है। यह अभी भी रनटाइम है, संकलन समय नहीं।

जुड़ा हुआ पृष्ठ से

:

let(_x = 1, _y = ", World") 
[ 
    // _x here is an int: 1 

    let(_x = "Hello") // hides the outer _x 
    [ 
     cout << _x << _y // prints "Hello, World" 
    ] 
] 
+0

मेरी राय में, यदि आप कार्यात्मक कोड लिखना चाहते हैं, तो आपको एक कार्यात्मक भाषा लेनी चाहिए। मैं केवल एक चलो निर्माण के लिए खोज रहा हूं क्योंकि टेम्पलेट मेटाप्रोग्रामिंग कार्यात्मक है। – user1034081