बस इसके बेहद कमर के लिए, मैंने Scheme binding to libpython बनाने का निर्णय लिया है ताकि आप योजना कार्यक्रमों में पायथन एम्बेड कर सकें। मैं पहले से ही पाइथन के सी एपीआई में कॉल करने में सक्षम हूं, लेकिन मैंने वास्तव में स्मृति प्रबंधन के बारे में सोचा नहीं है।सी कोड से निपटने के दौरान कोई पाइथन संदर्भ गिनती/कचरा संग्रहण गेटचास है?
जिस तरह से mzscheme का एफएफआई काम करता है यह है कि मैं एक फ़ंक्शन कॉल कर सकता हूं, और यदि वह फ़ंक्शन PyObject
पर पॉइंटर लौटाता है, तो मैं इसे संदर्भ गणना को स्वचालित रूप से बढ़ा सकता हूं। फिर, मैं एक फाइनलाइज़र पंजीकृत कर सकता हूं जो योजना वस्तु को कचरा इकट्ठा होने पर संदर्भ गणना में कमी आएगी। मैंने documentation for reference counting पर देखा है, और पहली नज़र में इसके साथ कोई समस्या नहीं दिख रही है (हालांकि यह कुछ मामलों में उप-इष्टतम हो सकती है)। क्या कोई गठजोड़ है जो मुझे याद आ रही है?
इसके अलावा, मुझे cyclic garbage collector documentation के सिर या पूंछ बनाने में परेशानी हो रही है। मुझे यहां क्या बातों को ध्यान में रखना होगा? विशेष रूप से, मैं पाइथन को कैसे जागरूक करता हूं कि मेरे पास कुछ संदर्भ है, इसलिए जब भी मैं इसका उपयोग कर रहा हूं, यह इसे एकत्र नहीं करता है?
तो ... पाइथन संदर्भ गणना * और * चक्रीय संरचना के लिए एक कचरा कलेक्टर का उपयोग करता है? यह एक बहुत बड़ी दोष है। डिजाइन प्रकार। किसी भी मामले में, ऐसा लगता है जैसे यह जेसन के लिए चीजों को और अधिक "मजेदार" बना देगा, अगर किसी अजगर-साइड चक्र में भाग लेने वाले किसी भी मूल्य योजना के संपर्क में आते हैं। –
अच्छी जानकारी। जब तक मैं इसे प्राप्त करता हूं, जब तक मैं इसे प्राप्त करता हूं और जब भी मैं इसके साथ काम करता हूं, तो मुझे सब कुछ ठीक कर लेना चाहिए, क्या मुझे ठीक होना चाहिए? या क्या कोई समस्या है जिसमें मैं भाग सकता हूं? –
@ जेसन, केवल INCREF * उधार * संदर्भ। कुछ फ़ंक्शन * नए * संदर्भ लौटाते हैं जो पहले से ही शामिल हैं। उन्हें शामिल करने के परिणामस्वरूप स्मृति रिसाव होगा। –