मैं कुछ प्रयोग कर रहा हूं और यहां कुछ ऐसा पाया गया है।हास्केल - लूप के लिए कुशल समकक्ष?
int main()
{
for(int i = 0;
i < 1000000;
++i)
{}
}
और निम्नलिखित हास्केल कार्यक्रम: निम्नलिखित सी कार्यक्रम पर विचार करें
import System.IO
loop :: Int -> IO()
loop n = if 0 == n then return() else loop (n-1)
main = loop 1000000
यहाँ ऊपर सी कार्यक्रम के लिए time
के उत्पादन में है:
real 0m0.003s
user 0m0.000s
sys 0m0.000s
... और के लिए हास्केल प्रोग्राम:
real 0m0.028s
user 0m0.027s
sys 0m0.000s
पहले मैंने सोचा था कि जीसीसी ने एक खाली पाश का पता लगाया और इसे अनुकूलित किया, लेकिन पुनरावृत्तियों की संख्या में वृद्धि के बाद, कार्यक्रम के चलने का समय भी बढ़ गया।
सी संस्करण
real 0m0.024s
user 0m0.023s
sys 0m0.000s
हास्केल संस्करण
real 0m0.245s
user 0m0.247s
sys 0m0.000s
आप देख सकते हैं, हास्केल: यहाँ 10000000 करने के लिए सेट पुनरावृत्तियों की संख्या के साथ कार्यक्रमों दोनों के लिए time
के आउटपुट कर रहे हैं, कार्यक्रम 10 गुना धीमा है।
प्रश्न है: for
लस्क को हास्केल में कुशल विकल्प क्या है? जैसा कि हमने अभी देखा है, सरल रिकर्सन प्रोग्राम को लगभग 10 गुना धीमा कर देता है (और यह शायद पूंछ रिकर्सन ऑप्टिमाइज़ेशन के साथ होता है)।
जिज्ञासा से बाहर, विधानसभा अनुकूलित ग कार्यक्रम पूरी तरह से से उत्पादित कोड पाश को दूर करता है? – shuttle87
पीएफटी, 'जबकि' लूप। ओह। : पी –
@ शटल 87 के साथ -ओ 3 ध्वज लूप पूरी तरह से हटा दिया जाता है, इसके बिना यह नहीं करता है। –