2012-03-26 8 views
12

page on the garbage collector निर्दिष्ट नहीं करता है कि डी एक वृद्धिशील कचरा कलेक्टर या एक स्टॉप-द-वर्ल्ड संस्करण का उपयोग करता है या नहीं। यह का उल्लेख करता है कुछ बार रोकता है, जो एक स्टॉप-द-वर्ल्ड कचरा कलेक्टर पर एक संकेत हो सकता है, लेकिन मुझे यकीन नहीं है।क्या डी प्रोग्रामिंग भाषा एक वृद्धिशील कचरा कलेक्टर का उपयोग करती है?

यदि यह वृद्धिशील कचरा कलेक्टर का उपयोग नहीं करता है, तो क्या इसके लिए कोई विशेष कारण हैं? एक स्टॉप-द-वर्ल्ड जीसी इंटरैक्टिव एप्लिकेशन के लिए कठिन समय देता है।

उत्तर

13

वर्तमान कार्यान्वयन (Druntime) एक रोकने के दुनिया कचरा कलेक्टर उपयोग करें, लेकिन अपने आप में भाषा एक कार्यान्वयन के विवरण पर कई प्रतिबन्ध नहीं लगा है।

डी, CDGC के लिए एक समवर्ती कचरा कलेक्टर है, * निक्स-जैसे ओएस (यह फोर्किंग का उपयोग करता है) के लिए।

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

+0

हाय वहाँ साथी Haunter प्रशंसक (हाँ मेरा अवतार Haunter द्वारा प्रेरित है)! उस ने कहा, एक वृद्धिशील कचरा कलेक्टर को लिखने की बाधाओं की आवश्यकता क्यों है? – orlp

+6

"वृद्धिशील कचरा संग्रह" आमतौर पर तात्पर्य है कि स्कैनिंग शुरू होने और समाप्त होने पर अनुप्रयोग कोड को बिंदुओं के बीच चलाने की अनुमति है। एक वस्तु को कचरा माना जाता है और एकत्र किया जाता है यदि जीसी को इसका कोई संदर्भ नहीं मिल रहा है ... समस्या तब होती है जब जीसी मेमोरी ब्लॉक ए स्कैन करता है, तो एप्लिकेशन कोड ब्लॉक बी से ए के ऑब्जेक्ट का एकमात्र संदर्भ चलाता है, और तो जीसी स्कैन ब्लॉक बी। यदि जीसी नोटिस नहीं करता है कि ब्लॉक ए स्कैन किए जाने के बाद संशोधित किया गया था, तो यह ऑब्जेक्ट के किसी भी संदर्भ को कभी नहीं देखेगा, और इसे छोड़ देगा। –

+0

यह गलत है, इसे आवश्यक नहीं है कि आवेदन कोड में लिखने की बाधाओं की आवश्यकता हो। स्मृति लिखने के लिए इसे एमएमयू तक पहुंच की आवश्यकता है - विंडोज़ पर हमारे पास मेमोरी राइट घड़ी एपीआई है। यह जादू नहीं है और वास्तव में मुश्किल नहीं है। – Lothar