यह मैक्रोज़ (मुझे लगता है) के बारे में एक और सैद्धांतिक सवाल है। मुझे पता है कि मैक्रोज़ स्रोत कोड लेते हैं और इसका मूल्यांकन किए बिना ऑब्जेक्ट कोड उत्पन्न करते हैं, जिससे प्रोग्रामर अधिक बहुमुखी सिंटैक्टिक संरचनाएं बनाते हैं। अगर मुझे इन दो मैक्रो सिस्टम को वर्गीकृत करना पड़ा, तो मैं कहूंगा कि "सी स्टाइल" मैक्रो और "लिस्प स्टाइल" मैक्रो था।मैक्रो-सक्षम भाषा डिबगिंग के लिए स्रोत कोड का ट्रैक कैसे रखती है?
ऐसा लगता है कि मैक्रोज़ डीबगिंग थोड़ा मुश्किल हो सकता है क्योंकि रनटाइम पर, वास्तव में चलने वाला कोड स्रोत से अलग होता है।
कैसे डिबगर preprocessed स्रोत कोड के मामले में कार्यक्रम के निष्पादन का ट्रैक रखता है? क्या कोई विशेष "डीबग मोड" है जिसे मैक्रो के बारे में अतिरिक्त डेटा कैप्चर करने के लिए सेट किया जाना चाहिए?
सी में, मैं समझ सकता हूं कि आप डिबगिंग के लिए एक संकलन समय स्विच सेट करेंगे, लेकिन लिस्पी के कुछ रूपों जैसे एक व्याख्या की गई भाषा, यह कैसे करेगी?
इस बाहर कोशिश नहीं कर लिए खेद है, तुतलाना toolchain और अधिक समय की तुलना में मैं यह पता लगाने की खर्च करने की आवश्यकता है।
लेकिन मैक्रो में वापस संकलित कोड मैपिंग निम्न समस्या का समाधान नहीं करता है: जब मैक्रो घोषणात्मक इनपुट (उदाहरण के लिए, मैक्रो जो संदर्भ-मुक्त व्याकरण से पार्सर उत्पन्न करता है) के आधार पर कोड उत्पन्न करता है तो यह डिबगिंग के दौरान बहुत उपयोगी होगा इनपुट का कौन सा हिस्सा "सक्रिय" है (उदाहरण के लिए, यदि संभव हो तो व्याकरण का नियम मिलान किया जा रहा है)। इसके लिए मैक्रो लेखक को स्पष्ट रूप से यह कहना होगा कि जेनरेट कोड के कौन से हिस्से मैक्रो इनपुट के किन हिस्सों से मेल खाते हैं। रैकेट मैक्रोज़ की ऐसी क्षमता है? अन्यथा, यह डीबगिंग (आंशिक रूप से) विस्तारित कोड के बराबर है। –
"अन्यथा, यह डीबगिंग (आंशिक रूप से) विस्तारित कोड के बराबर है।" मुझे नहीं लगता कि मैं इस वाक्य में गलत हूं। कृपया इसे अनदेखा करें। –
dmity-vk: दाएं - रैकेट में 'वाक्यविन्यास' विशेष रूप मूल रूप से मैक्रो से कोड के टुकड़ों के साथ मैक्रो उपयोगकर्ता से कोड के टुकड़ों को जोड़ने का ख्याल रखता है, और यह सुनिश्चित कर रहा है कि परिणामी रूपों पर स्रोत स्थान है सभी रूपों में सही है। –