आपका प्रश्न कई मायनों में दिलचस्प है, क्योंकि इसमें कई मुद्दों के लिए सावधानीपूर्वक भेदों की आवश्यकता होती है। लेकिन आपकी दृष्टि मुझे अनिवार्य रूप से सही लगती है। इस उत्तर को लिखने से पहले मैंने अपना उत्तर पढ़ने से बचने के लिए आपका संदर्भ नहीं पढ़ा।
सबसे पहले, आपका कथन Variables are symbolic names for memory
addresses
, यह लगभग सही है, लेकिन अवधारणा और इसके सामान्य कार्यान्वयन को भ्रमित करता है। एक चर वास्तव में सिर्फ एक कंटेनर है जिसमें एक मूल्य हो सकता है जिसे बदला जा सकता है। आमतौर पर, इस कंटेनर को कंप्यूटर पर मेमोरी स्पेस की एक विशेषता के रूप में कार्यान्वित किया जाता है, जिसके द्वारा पता और पता चलता है और चूंकि चर में ऑब्जेक्ट हो सकता है जिसमें अधिक या कम जानकारी के साथ प्रतिनिधित्व की आवश्यकता होती है।
लेकिन मैं स्वतंत्र रूप से कार्यान्वयन तकनीकों के साथ, भाषाओं के शब्दार्थ को देखने के लिए एक अधिक सार बिंदु पर विचार करूंगा।
तो चर एक सार बिंदु से सिर्फ कंटेनर हैं। ऐसे कंटेनर का नाम नहीं होना चाहिए। हालाँकि, भाषाओं में अक्सर ऐसे चर होते हैं, जिन्हें एक पहचानकर्ता से जोड़कर नाम दिया जाता है, ताकि पहचानकर्ता द्वारा चर के उपयोग को व्यक्त किया जा सके। एक चर वास्तव में विभिन्न अलियासिंग तंत्र के माध्यम से कई पहचानकर्ता हो सकता है। एक चर भी बड़े चर का एक उप-भाग हो सकता है: एक उदाहरण एक सरणी चर का एक सेल है, जिसे सरणी चर और सेल के सूचकांक को निर्दिष्ट करके नाम दिया जा सकता है, लेकिन साथ ही साथ उपनाम के माध्यम से पहचानकर्ताओं से भी जुड़ा हो सकता है।
मैं जानबूझकर कंटेनर शब्द का उपयोग कर रहा हूं जो कुछ तटस्थ है, अन्य शब्दों को लागू करने से बचने के लिए जो तकनीकी रूप से शब्दार्थ से भरे हो सकते हैं। यह वास्तव में wilipedia में वर्णित संदर्भ की अवधारणा के करीब है , जो अक्सर एक स्मृति पते के साथ भ्रमित होता है। पॉइंटर शब्द को अक्सर मेमोरी एड्रेस के रूप में समझा जाता है, लेकिन मुझे नहीं लगता कि अधिकांश उच्च-स्तरीय भाषाओं पर विचार करते समय यह सार्थक है, और संभवतः आपके द्वारा संदर्भित चर्चा पत्र में अनुचित (हालांकि पते का उपयोग किया जा सकता है), क्योंकि यह अनुचित है। एक विशिष्ट कार्यान्वयन का जिक्र। हालांकि, यह सी जैसी भाषा के लिए उपयुक्त है, जिसे कार्यान्वयन अवधारणाओं और मशीन वास्तुकला के बहुत करीब माना जाता है।
दरअसल, यदि आप कार्यान्वयन स्तर पर चर या मूल्यों को देखते हैं, तो "मशीन स्तर के संकेत" के अप्रत्यक्ष रूप से कई जटिल प्रणालियां हो सकती हैं, लेकिन यह उपयोगकर्ता के लिए अदृश्य हैं (और होनी चाहिए), ताकि अमूर्त बिंदु मैं विकसित हो सकता है वैध। अधिकांश प्रोग्रामिंग भाषाओं के लिए, उपयोगकर्ता को चिंता करने की ज़रूरत नहीं होनी चाहिए, या कार्यान्वयन के बारे में भी जानना चाहिए, क्योंकि कार्यान्वयन किसी दिए गए भाषा के लिए बहुत भिन्न हो सकते हैं। यह कुछ भाषाओं के लिए सही नहीं हो सकता है, जैसे कि सी, जो जानबूझकर मशीन वास्तुकला के करीब हैं, विधानसभा भाषाओं के लिए एक उन्नत विकल्प के रूप में जो स्पष्ट बाइनरी कोडिंग के लगभग सीधे संबंध हैं, लेकिन अधिकांश में सुविधाजनक उपयोग के लिए बहुत कम स्तर है। स्थितियों।
किसी भाषा के उपयोगकर्ता को क्या पता होना चाहिए, और कभी-कभी उससे भी कम होना चाहिए, वह यह है कि मूल्य और संबद्ध ऑपरेशन क्या हैं, जहां वे निहित हो सकते हैं, वे कैसे नामों से जुड़े हो सकते हैं, नामकरण प्रणाली कैसे काम करती है, कैसे नया हो सकता है मूल्यों को परिभाषित किया जाना आदि।
तो एक और महत्वपूर्ण अवधारणा पहचानकर्ता और नामकरण है। एक इकाई (एक मूल्य) का नामकरण एक पहचानकर्ता को एक मूल्य (आमतौर पर एक घोषणा में) के साथ जोड़कर किया जा सकता है। लेकिन अन्य नामित मूल्यों के लिए संचालन को लागू करके एक मूल्य भी प्राप्त किया जा सकता है। नामों का उपयोग किया जा सकता है, और उपयोग के संदर्भ के अनुसार, किसी दिए गए पहचानकर्ता से संबंधित है यह निर्धारित करने के लिए नियम (स्कोपिंग नियम) हैं। कुछ डोमेन के मानों को नाम देने के लिए विशेष नाम भी हैं, जिन्हें लिटलल्स कहा जाता है, जैसे पूर्णांक612) या बूलियन (जैसे सच )।
एक पहचानकर्ता के साथ अपरिवर्तनीय मूल्य का जुड़ाव आमतौर पर एक स्थिरांक कहलाता है। लिटरल्स उस अर्थ में निरंतर हैं।
"मूल्य कंटेनरों" को मूल्यों के रूप में भी माना जा सकता है, और एक पहचानकर्ता के साथ उनका जुड़ाव सामान्य "भोले" अर्थ में एक चर है जिसे आप उपयोग कर रहे हैं। तो आप कह सकते हैं कि एक चर "कंटेनर स्थिर" है।
अब आप सोच सकते हैं कि एक पहचानकर्ता को एक मान (स्थिर घोषणा) के साथ जोड़ने या एक चर के लिए एक मान निर्दिष्ट करने के बीच अंतर क्या है, अर्थात कंटेनर स्थिरांक के रूप में परिभाषित कंटेनर में मूल्य संग्रहीत करना। अनिवार्य रूप से, घोषणा को एक ऑपरेशन के रूप में देखा जा सकता है जो एक संकेतन को परिभाषित करता है, एक पहचानकर्ता को संबद्ध करता है जो कुछ मूल्य के लिए एक वाक्यात्मक इकाई है जो एक शब्दार्थ इकाई है। असाइनमेंट एक विशुद्ध रूप से शब्दार्थ ऑपरेशन है जो एक राज्य को संशोधित करता है, अर्थात एक कंटेनर के मूल्य को संशोधित करता है। कुछ अर्थों में, घोषणा एक अर्ध अवधारणा है जिसका कोई शब्दार्थ प्रभाव नहीं है, जो शब्दार्थ संस्थाओं के लिए एक नामकरण (अर्थात वाक्य-विन्यास) तंत्र प्रदान करने के अलावा है।
दरअसल, असाइनमेंट्स सिमेंटिक ऑपरेशंस होते हैं जो प्रोग्राम को निष्पादित करते समय गतिशील रूप से होते हैं, जबकि घोषणाओं में एक अधिक वाक्यात्मक प्रकृति होती है और आमतौर पर प्रोग्राम के टेक्स्ट में व्याख्या की जाती है, स्वतंत्र रूप से निष्पादन की। यही कारण है कि स्टेटिक स्कोपिंग (यानी टेक्स्ट स्कूपिंग) आमतौर पर पहचानकर्ताओं के अर्थ को समझने का स्वाभाविक तरीका है।
इस सब के बाद, मैं कह सकता हूं कि एक कंटेनर के लिए एक पॉइंटर वैल्यू सिर्फ एक दूसरा नाम है, और एक पॉइंटर वैरिएबल एक कंटेनर वैरिएबल है, यानी एक कंटेनर (निरंतर) जिसमें एक और कंटेनर हो सकता है (कुछ के द्वारा लगाए गए गेम पर संभावित सीमाओं के साथ) प्रकार)।
कोड के बारे में, आप बताते हैं [pointers] might indicate the entry point
to a section of code and can be used to call that code
। वास्तव में यह बिल्कुल सच नहीं है। कोड का एक खंड अक्सर अर्थहीन होता है (उच्च स्तर या कार्यान्वयन के दृष्टिकोण से)। एक उच्च-स्तरीय दृष्टिकोण से, कोड में आमतौर पर पहचानकर्ता होते हैं, और आपको इन पहचानकर्ताओं की स्थैतिक संदर्भ में व्याख्या करनी होगी, जहां वे घोषित किए गए थे। लेकिन वास्तव में उसी स्थिर संदर्भ का एक संभावित दोहराव है, अनिवार्य रूप से पुनरावृत्ति के कारण जो एक गतिशील (रन-टाइम) घटना है, और कोड को केवल स्थिर संदर्भ के एक उपयुक्त गतिशील उदाहरण में निष्पादित किया जा सकता है। यह थोड़ा जटिल है, लेकिन इसका नतीजा यह है कि उचित अवधारणा एक बंद करने वाली है जो कोड के एक टुकड़े और एक ऐसे वातावरण को जोड़ती है जहां पहचानकर्ताओं की व्याख्या की जानी है। क्लोजर एक उचित सिमेंटिक कॉन्सेप्ट है, यानी एक उचित निश्चित सिमेंटिक वैल्यू है। तब आपके पास क्लोजर स्थिरांक, क्लोजर वैरिएबल हो सकते हैं,
एक फ़ंक्शन एक क्लोजर है, आमतौर पर कुछ मापदंडों के साथ इसकी कुछ संस्थाओं (स्थिरांक और चर) को परिभाषित करने या शुरू करने के लिए।
मैं इन तंत्रों के उपयोग पर कई भिन्नताओं को छोड़ रहा हूं।
क्लोजर का उपयोग अत्यावश्यक या कार्यात्मक भाषाओं में OO संरचनाओं को परिभाषित करने के लिए किया जा सकता है। दरअसल, ओओ शैली पर प्रारंभिक कार्य (शायद नाम से पहले) उस तरह से किया गया था।
आपके द्वारा संदर्भित कागज, जिसे मैंने जल्दी से स्किम्ड किया है, एक दिलचस्प व्यक्ति द्वारा लिखा गया एक दिलचस्प लगता है, लेकिन संभवतः एक आसान पढ़ना नहीं है यदि आपके पास विभिन्न भाषाओं और उनके अंतर्निहित कम्प्यूटेशनल मॉडल के साथ महत्वपूर्ण अनुभव नहीं है।
लेकिन याद रखें: कई चीजें देखने वाले की आंखों में होती हैं, जब तक वह एक सुसंगत दृश्य को संरक्षित करता है। देखने के बिंदु अलग हो सकते हैं।
क्या इससे आपके सवाल का जवाब मिलता है?
पुनश्च: यह एक लंबा जवाब है। यदि आप इसके कुछ हिस्से को अपर्याप्त मानते हैं, तो कृपया इसके बारे में स्पष्ट रहें। धन्यवाद।