2013-08-22 6 views
7

मुझे वास्तव में हास्केल पसंद है, विशेष रूप से यह मजबूत प्रकार प्रणाली है। जब मुझे संकलन करने के लिए हास्केल प्रोग्राम मिलते हैं, तो वे आमतौर पर बग फ्री होते हैं, या कम से कम इसके बहुत करीब होते हैं।हास्केल प्रकार-सुरक्षित स्थान उपयोग

हालांकि, हास्केल के साथ मुख्य समस्या इसका अज्ञात स्थान उपयोग है। कम से कम कहें, सी ++, आप प्रोग्राम के अंतरिक्ष उपयोग के बारे में काफी निश्चित हो सकते हैं। जब आप ऑब्जेक्ट्स का निर्माण और डिज़ाइन करते हैं तो यह काफी स्पष्ट है।

हास्केल में, गुना के रूप में सरल चीजें थंक में बड़ी मात्रा में स्थान का उपयोग कर सकती हैं यदि आप उन्हें सही ढंग से नहीं लिखते हैं। स्मृति की कमी के कारण क्रैशिंग प्रोग्राम कुछ अन्य बग की तुलना में काफी बेहतर नहीं है, जो तर्कसंगत रूप से बदतर है।

मुझे पता है कि इन स्पेस लीक से बचने के तरीके हैं, लेकिन मैं इन स्पेस लीक से बचने के लिए प्रकार-सुरक्षित तरीकों की तलाश में हूं। जैसा कि, अगर मुझे यह गलत लगता है, तो मुझे कुछ प्रकार की संकलन त्रुटि मिल जाएगी, न कि उम्मीद है कि मेरा प्रोग्राम उत्पादन में होने पर स्मृति से बाहर हो जाएगा। उदाहरण के लिए, मुझे खुशी है कि मानक लाइब्रेरी फ़ंक्शंस को प्रतिस्थापित करें (शायद, एक गुना कहें जिसमें संकलन त्रुटि है यदि यह संचयक उदाहरण के लिए सख्त नहीं है)

क्या ऐसी चीज हास्केल में मौजूद है?

+0

इस चिड़ियाघर http://blog.ezyang.com/2011/05/space-leak-zoo/ जो लीक प्रकार प्रणाली के प्रकारों को नियंत्रित करना चाहिए मान लिया जाये? स्ट्रीमिंग लीक के लिए conduits पर्याप्त हैं। उदाहरण के लिए –

+0

ठोकर लीक। क्या आप यह भी समझा सकते हैं कि अंतरिक्ष उपयोग को नियंत्रित करने के लिए कंडिट शुद्ध कोड के साथ कैसे काम करते हैं (यानी एक सूची जो लीक के साथ लीक होती है लेकिन एक कंडिशन के साथ नहीं होती है? – Clinton

+0

ऐसे कई निर्माण हैं जो कंडिटेक्ट्स हैं जो आपको डेटा स्ट्रीम को संसाधित करने के लिए डिज़ाइन किए गए हैं नियंत्रित दर। इसमें इटेटेट्स, कंडिट्स, पाइप, और आईओ-स्ट्रीम्स के साथ-साथ उच्च-प्रदर्शन कंप्यूटिंग के लिए कुछ पुस्तकालय शामिल हैं जो स्ट्रीम फ्यूजन के रूप में जाने वाले ऑप्टिमाइज़ेशन को निष्पादित करते हैं। –

उत्तर

1

यह अच्छी तरह से स्वीकार किया जाता है कि हास्केल में अंतरिक्ष के बारे में तर्क बेहद मुश्किल है। वर्ष (1987) किताब साइमन Peyton जोन्स

http://research.microsoft.com/en-us/um/people/simonpj/papers/slpj-book-1987/

द्वारा इस विषय पर एक विशेष अध्याय है।

फिर भी, यदि कोई विशेष रूप से हास्केल कोड लिखता है, उदाहरण के लिए, साधारण जनरेटर का उपयोग करके, मेमोरी उपयोग नियंत्रित किया जा सकता है। निम्नलिखित पेपर (एपीएलएएस 2012 में प्रस्तुत) एक जटिल जटिल एल्गोरिदम के लिए स्मृति और विलंबता के बारे में तर्क का एक उदाहरण देता है, रैखिक सुंदर प्रिंटिंग (बीटीडब्ल्यू, हास्केल में मानक सुंदर मुद्रण पुस्तकालय इष्टतम से बहुत दूर हैं: उनके स्वरूपण समय नहीं है ओ (एन), जहां एन इनपुट की लंबाई है)। प्रयोगात्मक परिणाम स्मृति और समय जटिलता की भविष्यवाणियों की पुष्टि करते हैं। कृपया एपलास टॉक की स्लाइड्स देखें, जो प्लॉट दिखाती हैं।

http://okmij.org/ftp/continuations/PPYield/index.html