यह एक आम जगह है जो लेक्सिकल गुंजाइश तक पहुंच को संकलित समय (या एक स्थिर विश्लेषक द्वारा, क्योंकि मेरा उदाहरण पायथन में है) पर स्रोत कोड में स्थान पर आधारित किया जा सकता है।क्या लेक्सिकल स्कोप में गतिशील पहलू है?
यहां एक बहुत ही सरल उदाहरण है जहां एक समारोह में a
के लिए अलग-अलग मानों के साथ दो बंद होते हैं।
def elvis(a):
def f(s):
return a + ' for the ' + s
return f
f1 = elvis('one')
f2 = elvis('two')
print f1('money'), f2('show')
मैं विचार जब हम समारोह f
, जब हम a
देखते हैं, यह f
में निर्धारित नहीं है के लिए कोड पढ़ रहे हैं, तो हम संलग्नित कार्य करने के लिए पॉप अप और वहाँ एक पाते हैं कि साथ कोई समस्या नहीं है , और f
में a
यही है। स्रोत कोड में स्थान मुझे यह बताने के लिए पर्याप्त है कि f
को a
के लिए एक संलग्न दायरे से मूल्य मिलता है।
लेकिन जैसा कि here वर्णित है, जब कोई फ़ंक्शन कहा जाता है, तो इसका स्थानीय फ्रेम इसके मूल वातावरण को बढ़ाता है। तो रनटाइम पर पर्यावरण लुकअप करना कोई समस्या नहीं है। लेकिन मुझे यह सुनिश्चित नहीं है कि एक स्थिर विश्लेषक हमेशा काम कर सकता है जो कोड को चलाने से पहले संकलन समय पर बंद किया जाता है। उपर्युक्त उदाहरण में यह स्पष्ट है कि elvis
में दो बंद हैं और इन्हें ट्रैक रखना आसान है, लेकिन अन्य मामले इतना आसान नहीं होंगे। सहजता से मैं घबरा गया हूं कि स्थैतिक विश्लेषण का प्रयास सामान्य रूप से एक रोकथाम की समस्या में चला सकता है।
तो क्या लेक्सिकल स्कॉपिंग में वास्तव में एक गतिशील पहलू है, जहां स्रोत कोड में स्थान हमें बताता है कि एक संलग्न क्षेत्र शामिल है लेकिन जरूरी नहीं कि किस बंद को संदर्भित किया जाए? या यह संकलकों में एक हल समस्या है, और उनके बंद करने के लिए कार्यों के भीतर सभी संदर्भ वास्तव में विस्तार से विस्तार से काम किया जा सकता है?
या क्या उत्तर प्रोग्रामिंग भाषा पर निर्भर करता है - इस मामले में लेक्सिकल स्कोपिंग एक अवधारणा जितनी मजबूत नहीं है जैसा मैंने सोचा था?
[संपादित करें @comments:
मेरी उदाहरण के मामले में मैं अपने प्रश्न को फिर से कर सकते हैं: मैं तरह का दावा पढ़ें "शाब्दिक संकल्प संकलन समय पर निर्धारित किया जा सकता," अभी तक सोचा कि f1
में a
के मूल्य के संदर्भ और f2
को स्थिर रूप से/संकलन समय (सामान्य रूप से) पर काम किया जा सकता है।
समाधान है, लेक्सिकल स्कॉपिंग इतना दावा नहीं करता है। एल.एस. हमें संकलन समय पर बता सकते हैं, यह है कि कुछa
बुलाया परिभाषित किया जाएगा जब भी मैं f
में हूँ (और यह स्पष्ट रूप से स्थिर बाहर काम किया जा सकता है, इस शाब्दिक गुंजाइश की परिभाषा है), लेकिन निर्धारण मूल्य यह वास्तव में ले जाता है (या, कौन सा बंद सक्रिय है) 1) एलएस से परे है अवधारणा, 2) रनटाइम (स्थिर रूप से नहीं) पर किया जाता है, इसलिए एक अर्थ में गतिशील है, फिर भी 3) गतिशील स्कॉइंग से अलग नियम का उपयोग करता है।
@ पैट्रिक मैपिन को उद्धृत करने के लिए टेकवे संदेश, "कुछ गतिशील काम अभी भी किया जाना है।" ]
इसका क्या अर्थ हो सकता है? प्रोग्रामिंग भाषाओं को निर्धारक होना चाहिए, अन्यथा हम उनका उपयोग नहीं करेंगे। चीजें काफी कठिन हैं क्योंकि यह है। – wallyk
मुझे यकीन नहीं है कि मैं सवाल समझता हूं। क्या आप पूछ रहे हैं कि 'f1' और' f2' के मान स्थिर विश्लेषण का उपयोग करके निर्धारित किए जा सकते हैं? – Barmar
परिभाषा के अनुसार, व्याख्यात्मक दायरा पूरी तरह से व्याख्यात्मक है। आप बस संलग्न लेक्सिकल फ़ंक्शन, और इसके संलग्न कार्य को देखते हैं, और इसी तरह। – Barmar