The scope of a variable x is the region of the program in which uses of x refers to its declaration. One of the basic reasons of scoping is to keep variables in different parts of program distinct from one another. Since there are only a small number of short variable names, and programmers share habits about naming of variables (e.g., i for an array index), in any program of moderate size the same variable name will be used in multiple different scopes.
Scoping is generally divided into two classes:
Static scoping is also called lexical scoping. In this scoping a variable always refers to its top level environment. This is a property of the program text and unrelated to the run time call stack. Static scoping also makes it much easier to make a modular code as programmer can figure out the scope just by looking at the code. In contrast, dynamic scope requires the programmer to anticipate all possible dynamic contexts.
In most of the programming languages including C, C++ and Java, variables are always statically (or lexically) scoped i.e., binding of a variable can be determined by program text and is independent of the run-time function call stack.
For example, output for the below program is 10, i.e., the value returned by f() is not dependent on who is calling it (Like g() calls it and has a x with value 20). f() always returns the value of global variable x.
To sum up in static scoping the compiler first searches in the current block, then in global variables, then in successively smaller scopes.
With dynamic scope, a global identifier refers to the identifier associated with the most recent environment, and is uncommon in modern languages. In technical terms, this means that each identifier has a global stack of bindings and the occurrence of a identifier is searched in the most recent binding.
In simpler terms, in dynamic scoping the compiler first searches the current block and then successively all the calling functions.
Output in a a language that uses Dynamic Scoping :
Static Vs Dynamic Scoping
In most of the programming languages static scoping is dominant. This is simply because in static scoping it’s easy to reason about and understand just by looking at code. We can see what variables are in the scope just by looking at the text in the editor.
Dynamic scoping does not care how the code is written, but instead how it executes. Each time a new function is executed, a new scope is pushed onto the stack.
Perl supports both dynamic ans static scoping. Perl’s keyword “my” defines a statically scoped local variable, while the keyword “local” defines dynamically scoped local variable.
This article is contributed by Vineet Joshi. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to email@example.com. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Attention reader! Don’t stop learning now. Get hold of all the important CS Theory concepts for SDE interviews with the CS Theory Course at a student-friendly price and become industry ready.
- Difference between Static allocation and Stack allocation
- Difference between Static Allocation and Heap Allocation
- SQL | AND and OR operators
- Code Optimization Technique (logical AND and logical OR)
- Lex program to recognize valid arithmetic expression and identify the identifiers and operators
- Why Data Structures and Algorithms are "Must Have" for Developers and Where to learn them : Answered
- Data Structures and Algorithms Online Courses : Free and Paid
- Tree Traversals (Inorder, Preorder and Postorder)
- Little and Big Endian Mystery
- Structure Member Alignment, Padding and Data Packing
- SQL | Functions (Aggregate and Scalar Functions)
- Why FIRST and FOLLOW in Compiler Design?
- Parsing | Set 1 (Introduction, Ambiguity and Parsers)
- SLR, CLR and LALR Parsers | Set 3
- Language Processors: Assembler, Compiler and Interpreter
- MCQ on Memory allocation and compilation process
- Absolute and Relative Pathnames in UNIX
- GATE CS 2019 important dates and links
- Error detection and Recovery in Compiler
- Program to calculate First and Follow sets of given grammar