2012-02-19 26 views
6

निरंतरता में संग्रहीत के ढेर के इन प्रकार के बारे में फैक्टर मैनुअल वार्ता के This page ढेर पकड़ो? मेरे लिए तीन सबसे भ्रमित कॉलस्टैक, रीटेनस्टैक और नेमस्टैक हैं।कॉलस्टैक? retainstack? namestack?</p> <ul> <li>datastack</li> <li>retainstack</li> <li>callstack</li> <li>namestack</li> <li>catchstack</li> </ul> <p>इन क्या ठीक कार्य करें:

+0

क्या एक मनोरंजक भाषा है! +1 – Irfy

उत्तर

8

मैं निश्चित रूप से कोई कारक गुरु हूँ, लेकिन जब से उनके नाम उनके उपयोग का मतलब लगते हैं:

  • datastack: हमेशा की तरह आगे बढ़ाने और मूल्यों के पॉपिंग के लिए इस्तेमाल किया। 3 4 + '3' को धक्का देने के लिए डेटास्टैक का उपयोग करता है, फिर '4' दबाएं। चल रहा है '+' डेटास्टैक से 2 मान पॉप करता है और जवाब को 5, वापस डेटास्टैक पर धक्का देता है। कारक (कम से कम लिनक्स पर) की एक इंटरैक्टिव सत्र चल रहा है इस ढेर की सामग्री को प्रिंट जितने भी आदान प्रदान के बाद:

    $> 1 
    --- Data stack: 
    1 
    $> 2 
    --- Data stack: 
    1 
    2 
    $> + 
    --- Data stack: 
    3 
    $> . 
    3 
    $> 
    
  • callstack: जबकि उनके घटक शब्द पर अमल की दुकान जो शब्द चल रहे हैं और अपनी व्यक्तिगत प्रगति के लिए इस्तेमाल किया । कल्पना कीजिए कि आपने योग का एक बेहतर संस्करण परिभाषित किया है: : sum' (seq-of-int -- summmation) 0 [ + ] reduce 20 + ; (यह बेहतर है क्योंकि आपको मुफ्त में अतिरिक्त 20 मिलते हैं!)। कोड का पुन: उपयोग करना चाहते हैं, आपने मानक कारक के साथ आने वाले reduce शब्द का लाभ उठाया है। जबकि रनटाइम sum' निष्पादित कर रहा है, यह reduce के कार्यान्वयन को कॉल करता है। लेकिन, चूंकि हमें अभी भी अतिरिक्त 20 जोड़ने की आवश्यकता है, इसलिए किसी को reduce रिटर्न के बाद फिर से स्टार्टअप कहां रिकॉर्ड करना होगा। इन नोट्स को कॉलस्टैक पर संग्रहीत किया जाता है, डीबग रन के दौरान कुछ सहायक डेटा के साथ संभवतः डीबगर्स को यह समझने में मदद मिलती है कि क्या हो रहा है।

  • retainstack: सहायक प्रकार के डेटास्टैक पर मूल्यों को बनाए रखने के लिए उपयोग किया जाता है। फर्थ में, एक रिटेनस्टैक के रूप में कार्य करने के लिए रिटर्न स्टैक (कॉलस्टैक के फर्थ का एनालॉग) का दुरुपयोग कर सकता है। इस दृष्टिकोण के साथ समस्याओं में से एक यह है कि आपके गंदे हैक को साफ किए बिना आपके शब्द से लौटने से आप गलत स्थानों पर जा रहे हैं और सामान्य विनाश को खत्म कर सकते हैं। फर्थ का रनटाइम आपके मूल्यों को देखेगा, उम्मीद है कि वे एक अच्छा शब्द कहेंगे जब यह एक शब्द बुलाए और भ्रमित हो जाए। वापसी पते के लिए एक अलग ढेर का उपयोग करके, फैक्टर इससे बच सकते हैं।

  • namestack: dynamic variables को लागू करने के लिए आवश्यक डेटा को पकड़ने के लिए उपयोग किया जाता था। एक स्टैक का उपयोग करके, आप subroutine निष्पादित करते समय पुराने नामों को नए लोगों के साथ छुपा सकते हैं, फिर बाध्यकारी पॉप करें और पुराने नाम बहाल किए जाएंगे।

  • कैचस्टैक: अपवाद हैंडलिंग का समर्थन करने के लिए उपयोग किया जाता है। एक ढेर का उपयोग करके, subroutines अपवाद और छाया डिफ़ॉल्ट व्यवहार के लिए अपने विशेष हैंडलर पंजीकृत कर सकते हैं। फिर, शब्द लौटने के बाद, पुराने हैंडलर को ढेर से पॉप करके आसानी से बहाल किया जा सकता है।

संबंधित मुद्दे