शुद्ध भाषाओं में कचरा संग्रह कितना अलग है?


26

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

कचरा बीनने वाले किस रणनीति और तकनीक से शुद्धता का सामना करते हैं, जो वे अन्यथा नहीं करते? एक अशुद्ध भाषा की जीसी में बहुत अच्छी तरह से क्या काम करता है जो शुद्ध संदर्भ में नहीं है? जीसी के लिए शुद्ध भाषाएं क्या अन्य नई समस्याएं पैदा करती हैं?



जवाबों:


13

Ghc का वर्तमान कार्यान्वयन एक ऐसी रणनीति का उपयोग करता है जो केवल इसलिए काम करती है क्योंकि भाषा शुद्ध कार्यात्मक है और डेटा अपरिवर्तनीय है: क्योंकि कोई भी चर कभी भी किसी भी नई चीज़ को संदर्भित करने के लिए परिवर्तित नहीं किया जा सकता है, ऑब्जेक्ट केवल पुरानी वस्तुओं के संदर्भ रखते हैं, इसलिए यह एक पीढ़ीगत कचरा कलेक्टर चलाता है। ; चूँकि एक उच्च पीढ़ी द्वारा संदर्भित वस्तु को तब तक नहीं हटाया जा सकता है जब तक कि पीढ़ी GCD नहीं हो जाती है, यह वस्तुओं को उच्चतर पीढ़ी को उत्सुकता से बढ़ावा देता है; और चूंकि जीसी उन्हें स्वीप कर रहा है, इसलिए कुछ भी संदर्भ बदलने वाला नहीं है, यह समानांतर रूप से चल सकता है।

यहां अधिक विवरण के साथ एक पेपर है


4
ईगर प्रमोशन आलस्य पर निर्भर करता है - एक पुरानी पीढ़ी में एक थंक को अपडेट करने से नई पीढ़ी में एक पॉइंटर बन सकता है, लेकिन थंक केवल एक बार उत्परिवर्तित होते हैं, इसलिए यह युवा वस्तु को उत्सुकता से बढ़ावा देने के लिए पर्याप्त है। अन्य पुराने-से-युवा संदर्भ (जैसे, परिवर्तनशील सरणियों से) को "याद किए गए सेट" का उपयोग करके ट्रैक किया जाता है, जो कि मामले में उत्सुक पदोन्नति विफल होने पर भी उपयोग किया जाता है।
जॉन पूर्डी

1

हास्केल जैसी शुद्ध भाषा में, सभी डेटा अपरिवर्तनीय हैं और किसी भी मौजूदा डेटा संरचनाओं को किसी भी तरह से नहीं बदला जा सकता है

वास्तव में यह आम तौर पर सच नहीं है। शुद्ध भाषाएं गैर-सख्त (आलसी) मूल्यांकन का उपयोग करती हैं, इसलिए संभावित रूप से सभी सबएक्सप्रेस का मूल्यांकन स्थगित कर दिया जाता है। असामान्य रूप से अभिव्यक्त किए गए भाव आमतौर पर "थंक" के रूप में आवंटित किए जाते हैं। जब आवश्यकता होती है, तो अभिव्यक्ति का मूल्यांकन किया जाता है और थंक को परिणामी मूल्य में बदल दिया जाता है।

कचरा बीनने वाले किस रणनीति और तकनीक से शुद्धता का सामना करते हैं, जो वे अन्यथा नहीं करते?

केवल एक चीज जिसके बारे में मैं सोच सकता हूं वह है ब्लैक होल । मुझे याद नहीं है कि हस्केल शोध पत्रों में जीसी की तरफ कुछ और नया है।

एक अशुद्ध भाषा की जीसी में बहुत अच्छी तरह से क्या काम करता है जो शुद्ध संदर्भ में नहीं है?

जीसी लेखन बाधा। अशुद्ध भाषाएं बहुत अधिक ढेर में पॉइंटर्स लिखने के लिए होती हैं ताकि वे अपने लेखन अवरोधों को अधिक भारी अनुकूलित कर सकें।

अन्य जीसी एल्गोरिदम जैसे चिह्न-क्षेत्र, अशुद्ध भाषाओं के संदर्भ में बहुत अधिक व्यवहार्य हैं क्योंकि उनके पास शुद्ध भाषाओं की तुलना में बहुत कम आवंटन दर हो सकती है।

जीसी के लिए शुद्ध भाषाएं क्या अन्य नई समस्याएं पैदा करती हैं?

शुद्ध भाषाएं बहुत दुर्लभ हैं, इसलिए इस बात पर बहुत कम डेटा है कि कैसे शुद्ध कार्यक्रम स्मृति का उपयोग करते हैं और इसलिए, शुद्ध भाषा के लिए जीसी लिखने की कोशिश करते समय आप एक बदतर स्थिति में शुरू कर रहे हैं।


"जब आवश्यक हो तो अभिव्यक्ति का मूल्यांकन किया जाता है और परिणामी मूल्य में थंक को बदल दिया जाता है।" जहां तक ​​हास्केल उपयोगकर्ता का संबंध है, यह एक आंतरिक कार्यान्वयन विवरण है। उत्परिवर्तन का निरीक्षण करने का कोई तरीका नहीं है, इसलिए यह उपयोगकर्ता के दृष्टिकोण से उत्परिवर्तन नहीं है।
जैक

इसके अतिरिक्त यह पूरी तरह से एक शुद्ध भाषा के लिए सख्त होना संभव है - इदरीस को एक उदाहरण के लिए देखें।
जैक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.