2012-09-30 27 views
6

मैं इस पर पढ़ने की कोशिश कर रहा हूं, लेकिन मुझे इसका कोई उल्लेख नहीं मिल रहा है।फर्थ में एस "..." का जीवनकाल क्या है?

मानक के अनुसार, एक स्ट्रिंग S" के साथ बनाई गई संशोधित नहीं किया जा सकता है, और Gforth में एक सरल प्रयोग से यह स्पष्ट है कि स्ट्रिंग के लिए अंतरिक्ष शब्दकोश या पैड क्षेत्रों से नहीं आती है:

hex 
here . 7F48AB3B8758 ok 
pad . 7F48AB3B8808 ok 
s" test" .s <2> 77FDD0 4 ok 

मैं उस पते को कब तक वैध मान सकता हूं?

दूसरे शब्दों में, यदि मैं एक चर में यह पता (और गिनती) संग्रहीत करता हूं, तो क्या मैं इसे बाद में प्रोग्राम में देख सकता हूं, या मुझे इसे शब्दकोश या ढेर में एक अलग स्थान पर ले जाने की आवश्यकता है? और अगर मैं पता संग्रह नहीं करता, तो क्या मैं स्मृति को रिसाव कर दूंगा?

उत्तर

7

परिभाषा में संकलित जब स्ट्रिंग का जीवनकाल परिभाषा का है। s" आमतौर पर केवल संकलन समय पर उपयोग किया जाता है।

सभी फर्थ भी s" की व्याख्या-समय के उपयोग की अनुमति नहीं देते हैं और वास्तव में एएनएस कहते हैं, "इस शब्द के लिए व्याख्या अर्थशास्त्र अनिर्धारित हैं।" व्यवहार कम से कम आपके विशेष फर्थ के लिए विशिष्ट होगा।

आप Gforth का उपयोग कर रहे हैं जो कम से कम एक व्याख्या-समय स्ट्रिंग के लिए आरक्षित स्थान होता है। Gforth मैनुअल कहता है, "... स्ट्रिंग केवल s" की अगली कॉल तक मौजूद है"। यह कहता है, "कुछ फर्थ सिस्टम इन तारों में से एक से अधिक रखते हैं, लेकिन आम तौर पर उनके पास अभी भी सीमित जीवनकाल होता है।" (Section 3.24 Characters and Strings)।

मुझे उम्मीद है कि इससे मदद मिलती है!

+0

बहुत बहुत धन्यवाद! मैंने स्पष्ट रूप से उन अनुच्छेदों को याद किया है। कम से कम यह स्पष्ट करता है। – harald

+1

आप सही हैं, हालांकि gForth में "कम से कम एक व्याख्या-समय स्ट्रिंग" वास्तव में जितना चाहें उतना मतलब है। GForth में, 'एस' 'व्याख्या समय पर स्मृति आवंटित करता है, वहां स्ट्रिंग की प्रतिलिपि बनाता है, और इसे कभी भी मुक्त नहीं करता है (व्याख्या करने के लिए ठीक है)। मैंने इसे' देखें 'टाइप करके और फिर' save-mem 'देखें। –