2011-06-28 17 views
9

में निश्चित लंबाई परिपत्र बफर मैं हास्केल में कुछ सामान्य प्रकार के एक निश्चित लंबाई परिपत्र बफर बनाना चाहता हूं। बफर में वस्तुओं को भौतिक स्मृति (लिंक सूची से नहीं) में एक के बाद एक को स्थापित करने की आवश्यकता है। मैं इस विशिष्ट संरचना को चाहता हूं क्योंकि यह सीपीयू पर एल 2 कैश में आने वाले सभी डेटा की संभावनाओं को बेहतर बनाएगा। मैंने इस बारे में पढ़ा है कि हास्केल नए डेटा प्रकारों के लिए कैसे अनुमति देता है, हालांकि ऐसा लगता है कि "डेटा" का उपयोग करके बनाए गए प्रकार कुछ और हैं जो पैटर्न मिलान और संबंधित विधियों के साथ सी structs की महिमा करते हैं। क्या हास्केल में पूरी तरह ऊपर वर्णित निम्न स्तर की डेटा संरचनाएं बनाना संभव है।हैकेल

+1

हास्केल में निम्न स्तर की तर्क होना मुश्किल है। आईएमएचओ, उन कार्यों के लिए सी का उपयोग करना बेहतर है जहां आप प्रदर्शन की आखिरी बूंदों को निचोड़ना चाहते हैं। – fuz

+0

मुझे आश्चर्य है कि कैसे [डेटा.Sequence] (http://hackage.haskell.org/packages/archive/containers/latest/doc/html/Data-Sequence.html) ऐसी डेटा संरचना की तुलना करेगा। –

+0

jaspervdj, एससीएलवी, डैन बर्टन, उत्तर के लिए धन्यवाद। मुझे यकीन नहीं है कि अभी तक का सबसे अच्छा जवाब क्या है, लेकिन मैं आपके द्वारा सुझाए गए सब कुछ का शोध कर रहा हूं। एक बार फिर धन्यवाद। –

उत्तर

10

आप एक म्यूटेबल सरणी जैसी संरचना चाहते हैं, और आप विशेष रूप से अनबॉक्स किए गए एक को चाहते हैं ताकि अंतर्निहित सरणी न केवल आपके डेटा पर पॉइंटर्स स्टोर करे, बल्कि आइटम स्वयं ही हो।

मानक सरणी पुस्तकालय से Data.Array आपको लगता है कि का एक संस्करण देता है, लेकिन विशेष रूप से उच्च प्रदर्शन सरणियों वेक्टर पुस्तकालय से उपलब्ध हैं: http://hackage.haskell.org/package/vector

वेक्टर पुस्तकालय, ByteString, पाठ, और कुछ अन्य लोगों की तरह , हुड के नीचे निम्न स्तर के जीसी-विशिष्ट प्राइमेटिव की उचित मात्रा का उपयोग करता है। पुस्तकालय का उपयोग करने के लिए, आपको ऐसी चीजों के बारे में चिंता करने की ज़रूरत नहीं है। लेकिन अगर आप यह तय करते हैं कि लाइब्रेरी आपको जो कुछ चाहिए, वह आपको नहीं देती है, तो आप अपने स्रोत कोड के माध्यम से पढ़कर चाल और तकनीकों के तरीके में उचित राशि भी सीख सकते हैं।

+4

डेटा.वेक्टर के साथ एक और अच्छी सुविधा यह है कि सी पुस्तकालय में 'Data.Vector.Storable' arrays को पास करना अपेक्षाकृत सरल है। –

+0

हैकेज पैकेज 'वेक्टर-बफर' देखें। – vivian

8

हां, यह निश्चित रूप से संभव है। Real World Haskell से अध्याय creating a bloom filter इन प्रकार के कार्यान्वयन के लिए एक बहुत अच्छा उदाहरण होना चाहिए।