2009-11-02 13 views
18

मुझे समझ नहीं आता, कैसे एफपी compilers अपरिवर्तनीय डेटा संरचनाओं के साथ काम तेजी से, नहीं उड़ा ढेर कोड बनाने, आदिकार्यात्मक प्रोग्रामिंग: अपरिवर्तनीय डेटा संरचना दक्षता

उदाहरण के लिए, पेड़ में ऑपरेशन डालें, यह है नए नोड को जोड़ने से पहले पूरे पेड़ की प्रतिलिपि बनाने और कॉपी किए गए पेड़ को वापस करने के लिए, अनिवार्य कटरपार्ट बनाम केवल नए नोड में एक सूचक जोड़ने की जरूरत है। यदि सम्मिलन ऑपरेशन लाखों बार चलाया जाता है, तो इसमें स्मृति का भार लगेगा, और पेड़ बड़ा होने पर प्रतिलिपि धीमी और धीमी हो जाएगी। एफपी कंपाइलर्स वास्तव में इसे कैसे अनुकूलित करते हैं?

उत्तर

15

आपको बदलाव करने के लिए पूरे पेड़ की प्रतिलिपि बनाने की आवश्यकता नहीं है; आप अधिकांश संरचना साझा कर सकते हैं। उदाहरण देखें क्लोजर पर रिच हिकी द्वारा this blog, या this talk में आरेख (हैश की चर्चा के माध्यम से आधे रास्ते की कोशिश करता है) देखें।

+0

http://en.wikipedia.org/wiki/Hash_array_mapped_trie –

+0

http://en.wikipedia.org/wiki/Persistent_data_structure –

+0

आरेख ब्लॉग लिंक मर चुका है, तो आप एक लिंक मिल सकता है, तो कृपया अपना उत्तर अद्यतन, धन्यवाद! –

7

कंपाइलर वास्तव में इसे अनुकूलित नहीं करेगा, यह कुछ ऐसा है जो आपको विशेष रूप से कोडिंग के दौरान प्रोग्राम करना है। ऐसा करने के लिए तकनीक उत्कृष्ट शुद्ध रूप से कार्यात्मक डेटा संरचनाओं में वर्णित हैं (book, thesis)।

-4

यदि कचरा कलेक्टर अपना काम कर रहा है, तो डेटा संरचना की पुरानी प्रतियों का पुन: दावा किया जाएगा जब उनका उपयोग नहीं किया जा रहा है।

+0

क्या मैं पूछ सकता हूं कि इस जवाब को कम वोट क्यों दे रहा है? मान लीजिए कि मैं कुछ संशोधनों के माध्यम से एक ही सेट को स्थानांतरित करना चाहता हूं और चीजों को कार्यात्मक रखना चाहता हूं, क्या यह जानना उपयोगी नहीं होगा कि जीसी उन हिस्सों को एकत्र करेगा जो अब उपयोग में नहीं हैं? –

+1

यह सवाल के किसी भी तरीके से जवाब नहीं देता है। –

संबंधित मुद्दे