वैश्विक चर: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 5: Line 5:


== प्रयोग करें ==
== प्रयोग करें ==
वैश्विक चर के साथ सहभागिता तंत्र को वैश्विक पर्यावरण (वैश्विक स्थिति भी देखें) तंत्र कहा जाता है। वैश्विक पर्यावरण प्रतिमान [[स्थानीय पर्यावरण]] प्रतिमान के विपरीत है, जहां सभी चर उपप्रोग्राम # स्थानीय चर, पुनरावर्तन और पुन: प्रवेश के साथ कोई साझा स्मृति (इंटरप्रोसेस संचार) नहीं है (और इसलिए सभी इंटरैक्शन को संदेश पास करने के लिए पुन: आयोजित किया जा सकता है)।
वैश्विक चर के साथ सहभागिता तंत्र को वैश्विक पर्यावरण (वैश्विक स्थिति भी देखें) तंत्र कहा जाता है। वैश्विक पर्यावरण प्रतिमान [[स्थानीय पर्यावरण]] प्रतिमान के विपरीत है, जहां सभी चर बिना किसी साझा स्मृति तंत्र के स्थानीय हैं (और इसलिए संदेश पास करने के लिए सभी पारस्परिक व्यवहार को फिर से आयोजित किया जा सकता है)।


वैश्विक चर का व्यापक रूप से उपयोग कोड के उन वर्गों के बीच जानकारी देने के लिए किया जाता है जो समवर्ती [[सूत की अलमारी]] और सिग्नल हैंडलर जैसे कॉलर/कैली संबंध साझा नहीं करते हैं। भाषाएं (सी सहित) जहां प्रत्येक फ़ाइल एक अंतर्निहित नामस्थान को परिभाषित करती है, वैश्विक नामस्थान वाली भाषाओं के साथ देखी जाने वाली अधिकांश समस्याओं को समाप्त करती है, यद्यपिकुछ समस्याएं उचित एनकैप्सुलेशन के बिना बनी रह सकती हैं। उचित लॉकिंग के बिना (जैसे [[ म्युटेक्स ]] के साथ), ग्लोबल वेरिएबल्स का उपयोग करने वाला कोड सुरक्षित मेमोरी में केवल पढ़ने के लिए छोड़कर थ्रेड-सुरक्षित नहीं होगा।
वैश्विक चर का व्यापक रूप से उपयोग कोड के उन वर्गों के बीच जानकारी देने के लिए किया जाता है जो समवर्ती [[सूत की अलमारी]] और सिग्नल हैंडलर जैसे कॉलर/कैली संबंध साझा नहीं करते हैं। भाषाएं (सी सहित) जहां प्रत्येक फ़ाइल एक अंतर्निहित नामस्थान को परिभाषित करती है, वैश्विक नामस्थान वाली भाषाओं के साथ देखी जाने वाली अधिकांश समस्याओं को समाप्त करती है, यद्यपि कुछ समस्याएं उचित एनकैप्सुलेशन के बिना बनी रह सकती हैं। उचित लॉकिंग के बिना (जैसे [[ म्युटेक्स ]] के साथ), ग्लोबल वेरिएबल्स का उपयोग करने वाला कोड सुरक्षित मेमोरी में केवल पढ़ने के लिए छोड़कर थ्रेड-सुरक्षित नहीं होगा।
 
Interaction mechanisms with global variables are called '''global environment''' (see also '''global state''') mechanisms. The global environment paradigm is contrasted with the local environment paradigm, where all variables are local with no shared memory (and therefore all interactions can be reconducted to message passing).
 
Global variables are used extensively to pass information between sections of code that do not share a caller/callee relation like concurrent threads and signal handlers. Languages (including C) where each file defines an implicit namespace eliminate most of the problems seen with languages with a global namespace though some problems may persist without proper encapsulation. Without proper locking (such as with a mutex), code using global variables will not be thread-safe except for read only values in protected memory.


== [[पर्यावरण चर]] ==
== [[पर्यावरण चर]] ==

Revision as of 17:18, 8 June 2023

कंप्यूटर प्रोग्रामिंग में, एक वैश्विक चर वैश्विक विस्तार (प्रोग्रामिंग) के साथ एक चर है, जिसका अर्थ है कि यह पूरे कार्यक्रम में दृश्यमान (इसलिए सुलभ) है, जब तक कि परिवर्तनीय छायांकन न हो। सभी वैश्विक चरों के समुच्चय को वैश्विक वातावरण या वैश्विक स्थिति के रूप में जाना जाता है। संकलित भाषाओं में, वैश्विक चर सामान्यतः स्थिर चर होते हैं, जिनकी सीमा (जीवनकाल) कार्यक्रम की संपूर्ण कार्यावधि है, यद्यपि व्याख्या की गई भाषाओं (कमांड-लाइन दुभाषियों सहित) में, वैश्विक चर सामान्यतः गतिशील रूप से आवंटित किए जाने पर आवंटित किए जाते हैं, क्योंकि वे समय से पहले ज्ञात नहीं होते हैं ।

कुछ भाषाओं में, सभी चर वैश्विक होते हैं, या निर्धारित रूप से वैश्विक होते हैं, जबकि अधिकांश आधुनिक भाषाओं में चर का सीमित क्षेत्र होता है, सामान्यतः शाब्दिक क्षेत्र होता है, यद्यपि कार्यक्रम के शीर्ष स्तर पर एक चर घोषित करके वैश्विक चर प्राय: उपलब्ध होते हैं। यद्यपि, अन्य भाषाओं में, वैश्विक चर उपस्थित नहीं हैं; ये सामान्यतः मॉड्यूलर प्रोग्रामिंग भाषा हैं जो एक मॉड्यूल संरचना, या वर्ग आधारित प्रोग्रामिंग को लागू करती हैं।वर्ग-आधारित वस्तु-उन्मुख प्रोग्रामिंग भाषा जो एक वर्ग संरचना को लागू करती हैं।

प्रयोग करें

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

वैश्विक चर का व्यापक रूप से उपयोग कोड के उन वर्गों के बीच जानकारी देने के लिए किया जाता है जो समवर्ती सूत की अलमारी और सिग्नल हैंडलर जैसे कॉलर/कैली संबंध साझा नहीं करते हैं। भाषाएं (सी सहित) जहां प्रत्येक फ़ाइल एक अंतर्निहित नामस्थान को परिभाषित करती है, वैश्विक नामस्थान वाली भाषाओं के साथ देखी जाने वाली अधिकांश समस्याओं को समाप्त करती है, यद्यपि कुछ समस्याएं उचित एनकैप्सुलेशन के बिना बनी रह सकती हैं। उचित लॉकिंग के बिना (जैसे म्युटेक्स के साथ), ग्लोबल वेरिएबल्स का उपयोग करने वाला कोड सुरक्षित मेमोरी में केवल पढ़ने के लिए छोड़कर थ्रेड-सुरक्षित नहीं होगा।

Interaction mechanisms with global variables are called global environment (see also global state) mechanisms. The global environment paradigm is contrasted with the local environment paradigm, where all variables are local with no shared memory (and therefore all interactions can be reconducted to message passing).

Global variables are used extensively to pass information between sections of code that do not share a caller/callee relation like concurrent threads and signal handlers. Languages (including C) where each file defines an implicit namespace eliminate most of the problems seen with languages with a global namespace though some problems may persist without proper encapsulation. Without proper locking (such as with a mutex), code using global variables will not be thread-safe except for read only values in protected memory.

पर्यावरण चर

पर्यावरण चर कुछ ऑपरेटिंग सिस्टम द्वारा प्रदान की जाने वाली सुविधा है। ओएस के खोल (कंप्यूटिंग) के भीतर (यूनिक्स में के शेल, लिनक्स में बैश (यूनिक्स खोल), डॉस में कमांड.कॉम ​​और खिड़कियाँ में सीएमडी.ईएक्सई) वे एक प्रकार के चर हैं: उदाहरण के लिए, यूनिक्स और संबंधित प्रणालियों में एक साधारण चर पर्यावरण चर बन जाता है जब export कीवर्ड का प्रयोग किया जाता है। शेल के अलावा अन्य प्रोग्राम कोड को उन्हें एपीआई कॉल द्वारा एक्सेस करना होता है, जैसे किgetenv() और setenv().

वे उस प्रक्रिया के लिए स्थानीय हैं जिसमें उन्हें सेट किया गया था। इसका मतलब है कि अगर हम दो टर्मिनल विंडो खोलते हैं (दो अलग-अलग प्रक्रियाएं शेल चल रही हैं) और एक विंडो में पर्यावरण चर का मान बदलते हैं, तो वह परिवर्तन दूसरी विंडो द्वारा नहीं देखा जाएगा।

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

ग्लोबल-ओनली और ग्लोबल-बाय-डिफॉल्ट

कई गैर-संरचित प्रोग्रामिंग भाषाएं, जैसे (के प्रारंभिक संस्करण) बुनियादी , कोबोल और फोरट्रान I (1956) केवल वैश्विक चर प्रदान करते हैं। फोरट्रान II (1958) ने स्थानीय चरों के साथ सबरूटीन्स और वैश्विक चरों तक पहुँचने के लिए COMMON कीवर्ड की शुरुआत की। फोरट्रान में कॉमन का उपयोग फोरट्रान 77 में जारी रहा,[1] और बाद की भाषाओं जैसे PL/SQL को प्रभावित किया। ग्लोबल्स के लिए नामित सामान्य समूह कुछ हद तक संरचित नामस्थानों की तरह व्यवहार करते हैं।[2] फोर्थ (प्रोग्रामिंग भाषा), लुआ (प्रोग्रामिंग भाषा), पर्ल और अधिकांश शेल में निर्धारितरूप से चर भी वैश्विक होते हैं।

भाषा द्वारा

सी और सी ++

C भाषा में a नहीं है global कीवर्ड (कंप्यूटर प्रोग्रामिंग)। यद्यपि, किसी फ़ंक्शन के बाहर घोषित किए गए चर में फ़ाइल काक्षेत्र होता है, जिसका अर्थ है कि वे फ़ाइल के भीतर दिखाई दे रहे हैं। फ़ाइल स्कोप के साथ घोषित वेरिएबल्स उनकी घोषणा और संकलन इकाई के अंत के बीच दिखाई दे रहे हैं (.c फ़ाइल) (जब तक कि एक समान-नामित वस्तु द्वारा एक नजदीकी विस्तार में छायांकित न हो, जैसे कि स्थानीय चर); और वे स्पष्ट रूप से बाहरी संबंध रखते हैं और इस प्रकार न केवल उन्हें दिखाई देते हैं .c फ़ाइल या संकलन इकाई जिसमें उनकी घोषणाएँ होती हैं, लेकिन हर दूसरी संकलन इकाई जो पूर्ण कार्यक्रम बनाने के लिए जुड़ी होती है। बाहरी लिंकेज, हालांकि, अन्य फ़ाइलों में इस तरह के एक चर के उपयोग के लिए पर्याप्त नहीं है: एक संकलन इकाई के लिए इस तरह के वैश्विक चर को सही ढंग से एक्सेस करने के लिए, इसके प्रकार को जानने की आवश्यकता होगी। यह उपयोग करके प्रत्येक फ़ाइल में चर घोषित करके पूरा किया जाता है extern कीवर्ड। (यह प्रत्येक फ़ाइल में घोषित किया जाएगा लेकिन केवल एक में परिभाषित किया जा सकता है।) ऐसे extern घोषणाएं प्राय: साझा शीर्षलेख फ़ाइल में रखी जाती हैं, क्योंकि यह सभी के लिए सामान्य अभ्यास है .c कम से कम एक को शामिल करने के लिए एक परियोजना में फाइलें .h फ़ाइल: मानक हेडर फ़ाइल errno.h बनाना एक उदाहरण है errno एक परियोजना में सभी मॉड्यूल के लिए चर सुलभ। जहां इस वैश्विक पहुंच तंत्र को समस्याग्रस्त माना जाता है, इसे स्टेटिक (कीवर्ड) | का उपयोग करके अक्षम किया जा सकता हैstatic कीवर्ड जो एक वैरिएबल को फाइल स्कोप तक सीमित करता है, और इसके साथ आयात करने का प्रयास करेगा extern संकलन (या लिंकिंग) त्रुटि बढ़ाने के लिए।[3] सी (प्रोग्रामिंग भाषा) में वैश्विक चर का एक उदाहरण:

#include <stdio.h>

// This is the file-scope variable (with internal linkage), visible only in
// this compilation unit.
static int shared = 3;

// This one has external linkage (not limited to this compilation unit).
extern int over_shared;

// Also internal linkage.
int over_shared_too = 2;

static void ChangeShared() {
  // Reference to the file-scope variable in a function.
  shared = 5;
}

static void LocalShadow() {
  // Local variable that will hide the global of the same name.
  int shared;

  // This will affect only the local variable and will have no effect on the
  // file-scope variable of the same name.
  shared = 1000;
}

static void ParamShadow(int shared) {
  // This will affect only the parameter and will have no effect on the file-
  // scope variable of the same name.
  shared = -shared;
}

int main() {
  // Reference to the file-scope variable.

  printf("%d\n", shared);

  ChangeShared();

  printf("%d\n", shared);

  LocalShadow();

  printf("%d\n", shared);

  ParamShadow(1);

  printf("%d\n", shared);

  return 0;
}

चूंकि चर एक बाहरी है, इसे मुख्य के अलावा किसी फ़ंक्शन में उपयोग करने के लिए पैरामीटर के रूप में पास करने की कोई आवश्यकता नहीं है। यह मॉड्यूल में हर समारोह से संबंधित है।

आउटपुट होगा:

3
5
5
5

जावा

जावा जैसी कुछ भाषाओं में वैश्विक चर नहीं होते हैं। जावा में, वे सभी चर जो स्थानीय चर नहीं हैं, एक वर्ग के क्षेत्र हैं। इसलिए सभी चर या तो एक वर्ग या एक विधि के विस्तार में हैं। जावा में, स्थिर क्षेत्र (वर्ग चर के रूप में भी जाना जाता है) वर्ग के किसी भी उदाहरण से स्वतंत्र रूप से उपस्थित हैं और एक प्रति सभी उदाहरणों के बीच साझा की जाती है; इसलिए सार्वजनिक स्थैतिक क्षेत्रों का उपयोग उनके समान साझाकरण व्यवहार के कारण अन्य भाषाओं में वैश्विक चर के समान उद्देश्यों के लिए किया जाता है:

public class Global {
    public static int a;
}


पीएचपी

PHP में एक है global कीवर्ड और वैश्विक चर का उपयोग करने के कई असामान्य तरीके। वेरिएबल्स घोषित बाहरी कार्यों में फ़ाइल स्कोप होता है (जो कि अधिकांश उद्देश्यों के लिए व्यापकक्षेत्र है)। हालांकि, जब तक के साथ आयात नहीं किया जाता है, तब तक वे कार्यों के अंदर पहुंच योग्य नहीं होते हैं global कीवर्ड (यानी, कीवर्ड वैश्विक चरों तक पहुंचता है, यह उन्हें घोषित नहीं करता है)।

यद्यपि, कुछ पूर्वनिर्धारित चर, जिन्हें सुपरग्लोबल्स के रूप में जाना जाता है, हमेशा सुलभ होते हैं। वे सभी सरणियाँ हैं। एक सामान्य प्रयोजन है $GLOBALS सुपरग्लोबल, जिसमें सभी चर शामिल हैं कार्यक्षेत्र से बाहर परिभाषित। इसके तत्वों में परिवर्तन मूल चर को बदलते हैं, और अतिरिक्त नए चर बनाते हैं। सुपरग्लोबल्स $_POST और $_GET वेब प्रोग्रामिंग में व्यापक रूप से उपयोग किया जाता है।

अन्य भाषाएँ

यह भी देखें

संदर्भ

  1. "Fortran 77 Tutorial".
  2. "First Steps: Stack & Heap Objects".
  3. C in a Nutshell, P.Prinz & T Crawford, 2006, O'Reilly, Ch 11
  4. "What are the rules for local and global variables in Python?". docs.python.org. Python Software Foundation. Retrieved 4 June 2020.
  5. "चर को वैश्विक घोषित करें". in.mathworks.com. The MathWorks, Inc. Retrieved 7 February 2015.