2016-01-15 8 views
7

कार्यात्मक डेटा संरचनाएं (जैसे हैशेल/क्लोजर/स्कैला में उपयोग की गई हैश ऐरे मैप्ड ट्री) अंतर्निहित डेटा संरचना में बहुत से साझाकरण पर भरोसा करती है। उदाहरण के लिए, यदि हम नक्शा-जैसे डेटा प्रकार पर insert लागू करते हैं जो आम तौर पर डेटा संरचना को लागू करने वाले पेड़ पर पथ-प्रतिलिपि द्वारा कार्यान्वित किया जाता है।क्या जंग का उधार नियम कार्यात्मक डेटा संरचनाओं के रास्ते में मिलता है?

यह देखते हुए कि इन डेटा संरचनाओं को अंतर्निहित मूल्यों (और कोई मूल मालिक नहीं) पर भरोसा करने पर भरोसा है, क्या इस तरह के ढांचे को लागू करने के तरीके में उधार लेना होगा?

+0

वाक्यांश के रूप में, यह प्रश्न अत्यधिक व्यापक या राय आधारित लगता है। क्या आपने कुछ करने की कोशिश की है और यह काम नहीं कर रहा है? क्या आप "बचाना हैच" से अवगत हैं जो 'असुरक्षित' प्रदान करता है? यहां किस प्रकार का जवाब मान्य होगा? एक [हैमेट क्रेट] (https://crates.io/crates/hamt/) है, क्या यह एक उत्तर प्रदान करता है? – Shepmaster

+3

[इस प्रश्न] का जवाब देखें (https://stackoverflow.com/questions/31227269/generic-types-ownership-and-persistent-data-structures?rq=1)। यह बताता है कि 'आरसी' एक ही डेटा के कई मालिकों को अनुमति देता है, और जब यह एक प्रतिलिपि '.clone() 'की तरह दिखता है, तो यह एक उथली प्रतिलिपि है जो वास्तव में डेटा की प्रतिलिपि नहीं बनाता है। यह वास्तव में अपरिवर्तनीयता है जो ऐसा होने की अनुमति देता है। हैमेट क्रेट 'आरसी' का उपयोग करता है [यहां] (https://github.com/rainbowbismuth/hamt-rs/blob/master/src/lib.rs#L801)। –

+0

साझा अपरिवर्तनीय स्वामित्व आम तौर पर जीसी स्पष्ट करके सरल है। चक्रीय डेटा समस्याग्रस्त हिस्सा है। – Veedrac

उत्तर

8

संक्षिप्त उत्तर: नहीं

लांग उत्तर:

जंग वास्तव में काम करता है बहुत अच्छी तरह से साथ अपरिवर्तनीय ढांचे (यह सी const उदाहरण के लिए अधिक से अधिक की गारंटी देता है देता है)।

साझा स्वामित्व वास्तव में अपरिवर्तनीय मूल्य के साथ कोई समस्या नहीं है (Rc/Arc) और आप आसानी से एक अपरिवर्तनीय संरचना में कई बार उधार ले सकते हैं। उधार लेने के दौरान आप स्थानांतरित नहीं हो सकते हैं, लेकिन इसके संदर्भों के बजाय स्वामित्व प्रॉक्सी (Rc या Arc के माध्यम से) को सौंपकर इसे घुमाया जा सकता है।

जंग में एक मुद्दा जो आपके पास होस्केल में नहीं हो सकता है, Cell या RefCell के साथ परिवर्तनीय मानों को मिलाकर आप चक्र बना सकते हैं और उनको एकत्र नहीं किया जाएगा क्योंकि जंग का कोई जीसी नहीं है।

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