2013-09-28 15 views
11

यह this question पर एक फॉलो-अप का थोड़ा सा है।संकलन समय पर इलाके का निर्धारण क्यों किया जाता है?

  1. स्थानीय समय संकलन समय पर क्यों निर्धारित किया जाता है, निष्पादन समय पर नहीं? क्या यह पूरी तरह से प्रदर्शन के लिए है?
  2. क्या ऐसी भाषाएं हैं जो निष्पादन समय पर उनके चर को देखती हैं? अर्थात। हर बार जब एक चर का उपयोग किया जाता है, तो इस चर को पहली बार स्थानीय दायरे में खोजा जाता है और फिर खोज सभी संलग्न क्षेत्रों के माध्यम से बढ़ जाती है?
  3. ईसीएमए भाषाएं इसे कैसे संभालती हैं?

दूसरे शब्दों में प्रश्न 2 में कहें:

def f(): print ('f') 

def g(): 
    f() 
    f = 42 

g() 
+0

कोड क्या करना चाहिए? –

+0

'अनबाउंड स्थानीय चर' या इस लाइन के साथ कुछ उठाए बिना 'f' प्रिंट करें। – Hyperboreus

उत्तर

5

यह व्यवहार शाब्दिक scoping कहा जाता है: वहाँ भाषाओं जहां निम्नलिखित कोड (आवश्यक वाक्य रचना में) काम करता हैं। # 2 में आप जो वर्णन करते हैं उसे डायनामिक स्कोपिंग कहा जाता है, हालांकि मौखिक विवरण भ्रामक है (आप "स्कोप संलग्न करना" कहां कहते हैं, जहां "कॉलिंग फ़ंक्शन" या "सक्रियण रिकॉर्ड" अधिक सटीक होंगे)।

वस्तुतः सामान्य उपयोग में प्रत्येक भाषा सामान्य उपयोग में भाषा लेक्सिकल स्कोपिंग का उपयोग करती है, न केवल पायथन। इसमें सी # और ईसीएमएस्क्रिप्ट/जावास्क्रिप्ट (eval और with को छोड़कर) शामिल है, जो मुझे लगता है कि "ईसीएमए भाषा" का मतलब क्या है। भाषाएं हैं, और उनमें से कुछ अभी भी उपयोग में हैं। Emacs Lisp एक है, और पर्ल दोनों लेक्सिकल और गतिशील स्कोपिंग प्रदान करता है।

शाब्दिक तय करने के लिए तर्क सिर्फ प्रदर्शन के लिए (बंद सहित पूर्ण शाब्दिक scoping वास्तव में एक प्रदर्शन लागत, funcarg समस्याओं को देखने नहीं है) नहीं है, यह सादगी और विश्वसनीयता के लिए है। हालांकि भाषा सीखने पर यह आश्चर्यजनक हो सकता है, नियम वास्तव में मृत सरल हैं, इसलिए एक अनुभवी प्रोग्रामर तुरंत बता सकता है कि पहचानकर्ता का उपयोग किस दायरे को संदर्भित करता है। कोई अलगाव में कार्यों को समझ सकता है, क्योंकि इस फ़ंक्शन को कॉल करने वाले लोगों द्वारा निष्पादन प्रभावित नहीं होता है और उन्होंने को उनके चर नाम देने का निर्णय कैसे लिया।

+0

उत्तर के लिए धन्यवाद। "ईसीएमए भाषा" के साथ मैं ईसीएमए -262 (आईएसओ/आईईसी 16262) का पालन करने वाले सभी कार्यान्वयनों का उल्लेख करना चाहता हूं: जावास्क्रिप्ट, जेस्क्रिप्ट, क्यूटीस्क्रिप्ट, आदि ... – Hyperboreus

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