मुझे स्थिर रूप से टाइप की गई, जटिल भाषाओं के लिए एक कंपाइलर में प्रकार के आंतरिक प्रतिनिधित्व के संबंध में स्मृति प्रबंधन लिखने के लिए थोड़ी सी समस्या आ गई है। सी ++ में एक साधारण स्निपेट पर विचार करें जो आसानी से एक प्रकार का प्रदर्शन करता है जो स्वयं को संदर्भित करता है।जटिल भाषाओं में प्रकारों के लिए मेमोरी प्रबंधन
class X {
void f(const X&) {}
};
प्रकार एक-दूसरे के साथ लगभग असीमित जटिल संबंध हो सकते हैं। तो, एक कंपाइलर प्रक्रिया के रूप में, आप कैसे सुनिश्चित करते हैं कि वे ठीक से एकत्र किए गए हैं?
अभी तक, मैंने फैसला किया है कि कचरा संग्रह जाने का सही तरीका हो सकता है, जो मैं बहुत खुश नहीं हूं क्योंकि मैं सी ++ में कंपाइलर लिखना चाहता हूं, या वैकल्पिक रूप से, बस उन्हें छोड़ दें और कभी एकत्र न करें उन्हें संकलन चरण के जीवन के लिए जिसके लिए उनकी आवश्यकता है (जिसमें एक बहुत ही निश्चित जीवनकाल है) और फिर उन्हें बाद में इकट्ठा करें। इसके साथ समस्या यह है कि यदि आपके पास बहुत जटिल प्रकार थे, तो आप इस तरह की बहुत सारी याददाश्त खो सकते हैं।
आप किस वस्तु से चिंतित हैं, बिल्कुल? टोकन? एएसटी नोड्स? यह सांख्यिकीय रूप से टाइप की गई, "जटिल" (?) भाषाओं से कैसे संबंधित है? –
आम समाधान आपके कंपाइलर को कई पास जोड़ना है। यह करने का यह सबसे आसान तरीका है। पहला पास बस इन नामों को हल करता है और उन्हें लिंक करता है, और फिर अगले पास में इसका उपयोग किया जा सकता है। भाषा के आधार पर, आपको सबकुछ सही तरीके से उपलब्ध कराने के लिए कई पास की आवश्यकता हो सकती है। – tp1
@ कोनराड: एक प्रकार का आंतरिक प्रतिनिधित्व, शायद टाइप नाम की श्रेणी की तरह कुछ होगा। @ tp1: यह प्रतीकों को पार्स करने और हल करने के लिए है .. उन प्रतीकों के स्मृति की प्रबंधन नहीं करना जो उनके प्रतीक हैं। – Puppy