2009-05-06 7 views
5

क्या गैर-व्याख्याित भाषा के लिए कचरा कलेक्टर होना संभव है। व्याख्या की गई भाषाओं में व्याख्याक प्रोग्राम लाइन को लाइन द्वारा निष्पादित करते हैं ताकि इंटरप्रिटर एक जीसी के साथ रनटाइम भी प्रदान कर सके। लेकिन क्या आपके कोड में जीसी बनाने के बिना किसी अन्य भाषा के लिए कचरा कलेक्टर रखना संभव है?क्या एक गैर-व्याख्या की गई भाषा में कचरा कलेक्टर हो सकता है?

+5

मुझे आश्चर्य है कि क्या आप "व्याख्या" और "मूल" के बीच एक झूठी डिचोटोमी मान रहे हैं। जावा और सी #, उदाहरण के लिए, न तो "व्याख्या" और न ही "मूल" हैं - वे एक वीएम में (अनिवार्य रूप से) चलाते हैं, लेकिन आईएल से। –

+0

क्या आप कृपया और बता सकते हैं:? – Geek

+0

उस बातचीत के लिए, मेरे उत्तर पर टिप्पणियाँ देखें। –

उत्तर

0

हां।

स्मार्ट पॉइंटर कार्यान्वयन के साथ सी ++ कचरा इकट्ठा करेगा क्योंकि स्मार्ट पॉइंटर संदर्भ संख्या शून्य पर जाती है।

आपके पास कचरा संग्रह है। आपने इसे स्वयं नहीं बनाया है।

+1

मुझे लगता है कि सवाल कचरा संग्रह का पता लगाने के बारे में है, और refcount एक विकल्प नहीं है। –

+1

यह कचरा संग्रह नहीं है। कई ऑब्जेक्ट्स को इस तरह से कनेक्ट करें कि उनके पास एक चक्र है और जब तक आप चक्र को मैन्युअल रूप से तोड़ नहीं देते तब तक वे कभी नष्ट नहीं होते हैं। – sharptooth

+0

@ शार्पूटोथ: इसे बाकी दुनिया के साथ ले जाएं, मुझे नहीं: http://www.codeproject.com/KB/cpp/automatic_gc_using_sp.aspx –

11

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

+0

अच्छी तरह से व्याख्या की गई भाषाएं आपको रन-टाइम देती हैं। कम से कम व्याख्याकर्ता के लिए रन-टाइम के रूप में काम करना और कचरा कलेक्टर चलाने के लिए भी आसान है। किसी भी मूल भाषा में ओएस रनटाइम होगा? और इसलिए कोई जीसी नहीं है? – Geek

+1

जीसी और व्याख्या एक दूसरे से असंबंधित हैं। हां, एक व्याख्या की गई भाषा के लिए कचरा संग्रह होने के लिए यह संभवतः आसान है, लेकिन गैर-व्याख्या की गई भाषाएं भी ऐसा कर सकती हैं। ओएस में आमतौर पर कचरा संग्रह के लिए एम्बेडेड समर्थन नहीं होता है, लेकिन कई भाषा रनटाइम होते हैं। – sharptooth

+2

और यहां तक ​​कि एक विशेष तरीके से पॉइंटर चर को चिह्नित किए बिना आप तथाकथित रूढ़िवादी जीसी हो सकते हैं जो सभी स्मृति सामग्री को संभावित पॉइंटर्स के रूप में मानता है। बोहेम के जीसी को दूसरे जवाब में देखें। –

6

ठीक है, .NET भाषाएं (जो आईएल-सी #, वीबी.नेट, एमसी ++, आदि से निकलती हैं) का अर्थ नहीं है (विशेष रूप से यदि आप एनजीएनएन का उपयोग करते हैं) - और इसमें पूर्ण कचरा संग्रह है।

इसी तरह, जावा।

+0

जावा मेरे मित्र का व्याख्या किया गया है। भले ही यह हॉटस्पॉट के साथ है। – Geek

+0

नहीं - यह "मूल" नहीं हो सकता है, लेकिन इससे कम परिभाषा नहीं होती है - कम से कम, सामान्य परिभाषा के तहत नहीं। –

+0

मैं आपके उत्तर को कम से कम, सामान्य परिभाषा के तहत नहीं "? इसका व्याख्या किया गया है। ?? – Geek

0

उद्देश्य-सी 2 में अब कचरा संग्रह है, और सी ++ के लिए भी कचरा संग्रहण पुस्तकालय उपलब्ध हैं।

मुझे लगता है कि यह तब तक संभव है जब तक यह भाषा आपको वस्तुओं का निरीक्षण करने की अनुमति देती है ताकि आप ऑब्जेक्ट पेड़ को पार कर सकें।

+1

क्या आप कृपया बता सकते हैं कि यह कैसे काम करता है। यह आपके प्रोग्राम के साथ जीसी थ्रेड को जोड़ने जैसा है? – Geek

+1

अलग थ्रेड जीसी से असंबंधित नहीं है - यह जावा की तरह ही होता है।अधिकांश सी ++ (और उद्देश्य-सी) इसे हटाए गए समय पर संभालते हैं जब रेफरी गिनती शून्य हो जाती है। –

+1

उद्देश्य-सी 2 में असली कचरा संग्रह है; रनटाइम ऑब्जेक्ट पेड़ को पार करता है। कचरा संग्रह सक्षम होने पर Refcounts अनदेखा कर रहे हैं। मेरा मानना ​​है कि यह घटना लूप का हिस्सा है, लेकिन मुझे यकीन नहीं है। –

2

नई सी ++ 0x में ऐसी विशेषताएं शामिल हैं जो कचरा संग्रहण को कार्यान्वित करने में आसान बनाती हैं। उदाहरण के लिए यह interview देखें।

3

एक संकलित भाषा में एक वास्तविक क्रियान्वयन के लिए, इस मामले में सी और/या सी ++, http://www.hpl.hp.com/personal/Hans_Boehm/gc/ पर बोहम जीसी देख

3

हास्केल, कचरा संग्रह है कि क्या यह मूल कोड को संकलित है या व्याख्या की।