ठीक है, यह मेरा सिनात्रा ऐप के साथ मेमोरी मुद्दों को डीबग करने का मेरा दूसरा प्रयास है। मुझे विश्वास है कि मैंने इस बार सरल नमूना कोड में इसे दबा दिया है।रूबी प्रतीक # to_proc 1.9.2-पी 180 में संदर्भ लीक?
ऐसा लगता है कि जब मैं .map(&:some_method)
के माध्यम से एक सरणी फ़िल्टर करता हूं, तो यह उस सरणी में आइटम को कचरा नहीं मिला है। बराबर .map{|x| x.some_method}
चलाना पूरी तरह से ठीक है।
प्रदर्शन: एक सरल नमूना वर्ग को देखते हुए:
class C
def foo
"foo"
end
end
अगर मैं आईआरबी में निम्नलिखित चलाने के लिए, यह आम तौर पर एकत्र हो जाता है:
ruby-1.9.2-p180 :001 > a = 10.times.map{C.new}
=> [...]
ruby-1.9.2-p180 :002 > b = a.map{|x| x.foo}
=> ["foo", "foo", "foo", "foo", "foo", "foo", "foo", "foo", "foo", "foo"]
ruby-1.9.2-p180 :003 > ObjectSpace.each_object(C){}
=> 10
ruby-1.9.2-p180 :004 > a = nil
=> nil
ruby-1.9.2-p180 :005 > b = nil
=> nil
ruby-1.9.2-p180 :006 > GC.start
=> nil
ruby-1.9.2-p180 :007 > ObjectSpace.each_object(C){}
=> 0
तो सी का कोई सन्दर्भ अब मौजूद। अच्छा। लेकिन map{|x| x.foo} with map(&:foo)
(जो बराबर रूप में विज्ञापित है) प्रतिस्थापन में, एकत्रित नहीं प्राप्त करता है:
ruby-1.9.2-p180 :001 > a = 10.times.map{C.new}
=> [...]
ruby-1.9.2-p180 :002 > b = a.map(&:foo)
=> ["foo", "foo", "foo", "foo", "foo", "foo", "foo", "foo", "foo", "foo"]
ruby-1.9.2-p180 :003 > ObjectSpace.each_object(C){}
=> 10
ruby-1.9.2-p180 :004 > a = nil
=> nil
ruby-1.9.2-p180 :005 > b = nil
=> nil
ruby-1.9.2-p180 :006 > GC.start
=> nil
ruby-1.9.2-p180 :007 > ObjectSpace.each_object(C){}
=> 10
ruby-1.9.2-p180 :008 >
यह एक गहरे लाल रंग का बग है? मैं सुनिश्चित करने के लिए रूबी के अधिक संस्करणों में कोशिश करूंगा लेकिन यह एक स्पष्ट मुद्दा की तरह लगता है। किसी को पता है कि मैं क्या गलत कर रहा हूँ?
संपादित करें:
मैं 1.8.7-p352 में यह कोशिश की है और यह मुद्दा नहीं है। 1.9.3-पूर्वावलोकन 1 है हालांकि अभी भी समस्या है। क्या एक बग रिपोर्ट क्रम में है या क्या मैं कुछ गलत कर रहा हूं?
EDIT2: स्वरूपण (? क्यों प्रत्येक पंक्ति का उत्पादन वाक्य रचना से पहले चार रिक्त स्थान डाल करता है पर प्रकाश डाला, जबकि <pre>
टैग नहीं है)
मैं एक बग रिपोर्ट आज़माउंगा और भेजूंगा लेकिन मुझे रुबी रेडमाइन पर खाता खोलने में परेशानी हो रही है। मैं बाद में तब तक इंतजार करूंगा जब उन्हें अपने लॉगिन सिस्टम में परेशानी हो रही हो। –
मैं Google Mail का उपयोग कर रहा हूं और यह स्पैम के रूप में उनके पुष्टिकरण मेल को चिह्नित करता है। शायद आपको अपने स्पैम फ़ोल्डर की जांच करनी चाहिए: डी –
अच्छी कॉल! मुझे नहीं पता था कि उन्होंने एक पुष्टिकरण मेल भी भेजा था। वैसे भी, बग # 5261: http://redmine.ruby-lang.org/issues/5261 –