SlideShare a Scribd company logo
ISBN 0-321-49362-1
Chapter 5
Names, Bindings,
and Scopes
Copyright © 2018 Pearson. All rights reserved. 1-2
Chapter 5 Topics
• Introduction
• Names
• Variables
• The Concept of Binding
• Scope
• Scope and Lifetime
• Referencing Environments
• Named Constants
Copyright © 2018 Pearson. All rights reserved. 1-3
Introduction
• Imperative languages are abstractions of von
Neumann architecture
– Memory
– Processor
• Variables are characterized by attributes
– To design a type, must consider scope, lifetime,
type checking, initialization, and type compatibility
Copyright © 2018 Pearson. All rights reserved. 1-4
Names
• Design issues for names:
– Are names case sensitive?
– Are special words reserved words or keywords?
Copyright © 2018 Pearson. All rights reserved. 1-5
Names (continued)
• Length
– If too short, they cannot be connotative
– Language examples:
• C99: no limit but only the first 63 are significant; also,
external names are limited to a maximum of 31
• C# and Java: no limit, and all are significant
• C++: no limit, but implementers often impose one
Copyright © 2018 Pearson. All rights reserved. 1-6
Names (continued)
• Special characters
– PHP: all variable names must begin with dollar
signs
– Perl: all variable names begin with special
characters, which specify the variable’s type
– Ruby: variable names that begin with @ are
instance variables; those that begin with @@ are
class variables
Names (continued)
• Case sensitivity
– Disadvantage: readability (names that look alike
are different)
• Names in the C-based languages are case sensitive
• Names in others are not
• Worse in C++, Java, and C# because predefined
names are mixed case (e.g.
IndexOutOfBoundsException)
Copyright © 2018 Pearson. All rights reserved. 1-7
Copyright © 2018 Pearson. All rights reserved. 1-8
Names (continued)
• Special words
– An aid to readability; used to delimit or separate
statement clauses
- A keyword is a word that is special only in
certain contexts
– A reserved word is a special word that cannot be
used as a user-defined name
– Potential problem with reserved words: If there
are too many, many collisions occur (e.g., COBOL
has 300 reserved words!)
Copyright © 2018 Pearson. All rights reserved. 1-9
Variables
• A variable is an abstraction of a memory cell
• Variables can be characterized as a six tuples
of attributes:
– Name
– Address
– Value
– Type
– Lifetime
– Scope
Copyright © 2018 Pearson. All rights reserved. 1-10
Variables Attributes
• Name - not all variables have them
• Address - the memory address with which it is
associated
– A variable may have different addresses at different times
during execution
– A variable may have different addresses at different places
in a program
– If two variable names can be used to access the same
memory location, they are called aliases
– Aliases are created via pointers, reference variables, C and
C++ unions
– Aliases are harmful to readability (program
readers must remember all of them)
Copyright © 2018 Pearson. All rights reserved. 1-11
Variables Attributes (continued)
• Type - determines the range of values of variables
and the set of operations that are defined for values
of that type; in the case of floating point, type also
determines the precision
• Value - the contents of the location with which the
variable is associated
- The l-value of a variable is its address
- The r-value of a variable is its value
• Abstract memory cell - the physical cell or collection of
cells associated with a variable
Copyright © 2018 Pearson. All rights reserved. 1-12
The Concept of Binding
A binding is an association between an entity
and an attribute, such as between a variable
and its type or value, or between an
operation and a symbol
• Binding time is the time at which a binding
takes place.
Copyright © 2018 Pearson. All rights reserved. 1-13
Possible Binding Times
• Language design time -- bind operator
symbols to operations
• Language implementation time-- bind
floating point type to a representation
• Compile time -- bind a variable to a type in
C or Java
• Load time -- bind a C or C++ static
variable to a memory cell)
• Runtime -- bind a nonstatic local variable to
a memory cell
Copyright © 2018 Pearson. All rights reserved. 1-14
Static and Dynamic Binding
• A binding is static if it first occurs before run
time and remains unchanged throughout
program execution.
• A binding is dynamic if it first occurs during
execution or can change during execution of
the program
Copyright © 2018 Pearson. All rights reserved. 1-15
Type Binding
• How is a type specified?
• When does the binding take place?
• If static, the type may be specified by either
an explicit or an implicit declaration
Copyright © 2018 Pearson. All rights reserved. 1-16
Explicit/Implicit Declaration
• An explicit declaration is a program statement
used for declaring the types of variables
• An implicit declaration is a default mechanism
for specifying types of variables through
default conventions, rather than declaration
statements
• Basic, Perl, Ruby, JavaScript, and PHP provide
implicit declarations
– Advantage: writability (a minor convenience)
– Disadvantage: reliability (less trouble with Perl)
Explicit/Implicit Declaration (continued)
• Some languages use type inferencing to
determine types of variables (context)
– C# - a variable can be declared with var and an
initial value. The initial value sets the type
– Visual Basic 9.0+, ML, Haskell, and F# use type
inferencing. The context of the appearance of a
variable determines its type
Copyright © 2018 Pearson. All rights reserved. 1-17
Copyright © 2018 Pearson. All rights reserved. 1-18
Dynamic Type Binding
• Dynamic Type Binding (JavaScript, Python,
Ruby, PHP, and C# (limited))
• Specified through an assignment statement
e.g., JavaScript
list = [2, 4.33, 6, 8];
list = 17.3;
– Advantage: flexibility (generic program units)
– Disadvantages:
• High cost (dynamic type checking and interpretation)
• Type error detection by the compiler is difficult
Copyright © 2018 Pearson. All rights reserved. 1-19
Variable Attributes (continued)
• Storage Bindings & Lifetime
– Allocation - getting a cell from some pool of
available cells
– Deallocation - putting a cell back into the pool
• The lifetime of a variable is the time during
which it is bound to a particular memory cell
Copyright © 2018 Pearson. All rights reserved. 1-20
Categories of Variables by Lifetimes
• Static--bound to memory cells before
execution begins and remains bound to the
same memory cell throughout execution,
e.g., C and C++ static variables in functions
– Advantages: efficiency (direct addressing),
history-sensitive subprogram support
– Disadvantage: lack of flexibility (no recursion)
Copyright © 2018 Pearson. All rights reserved. 1-21
Categories of Variables by Lifetimes
• Stack-dynamic--Storage bindings are created for
variables when their declaration statements are
elaborated.
(A declaration is elaborated when the executable
code associated with it is executed)
• If scalar, all attributes except address are statically
bound
– local variables in C subprograms (not declared static) and
Java methods
• Advantage: allows recursion; conserves storage
• Disadvantages:
– Overhead of allocation and deallocation
– Subprograms cannot be history sensitive
– Inefficient references (indirect addressing)
Copyright © 2018 Pearson. All rights reserved. 1-22
Categories of Variables by Lifetimes
• Explicit heap-dynamic -- Allocated and deallocated by
explicit directives, specified by the programmer,
which take effect during execution
• Referenced only through pointers or references, e.g.
dynamic objects in C++ (via new and delete), all
objects in Java
• Advantage: provides for dynamic storage
management
• Disadvantage: inefficient and unreliable
Copyright © 2018 Pearson. All rights reserved. 1-23
Categories of Variables by Lifetimes
• Implicit heap-dynamic--Allocation and
deallocation caused by assignment
statements
– all variables in APL; all strings and arrays in Perl,
JavaScript, and PHP
• Advantage: flexibility (generic code)
• Disadvantages:
– Inefficient, because all attributes are dynamic
– Loss of error detection
Copyright © 2018 Pearson. All rights reserved. 1-24
Variable Attributes: Scope
• The scope of a variable is the range of statements
over which it is visible
• The local variables of a program unit are those that
are declared in that unit
• The nonlocal variables of a program unit are those
that are visible in the unit but not declared there
• Global variables are a special category of nonlocal
variables
• The scope rules of a language determine how
references to names are associated with variables
Copyright © 2018 Pearson. All rights reserved. 1-25
Static Scope
• Based on program text
• To connect a name reference to a variable, you (or the
compiler) must find the declaration
• Search process: search declarations, first locally, then in
increasingly larger enclosing scopes, until one is found
for the given name
• Enclosing static scopes (to a specific scope) are called
its static ancestors; the nearest static ancestor is called
a static parent
• Some languages allow nested subprogram definitions,
which create nested static scopes (e.g., Ada, JavaScript,
Common Lisp, Scheme, Fortran 2003+, F#, and Python)
Copyright © 2018 Pearson. All rights reserved. 1-26
Scope (continued)
• Variables can be hidden from a unit by
having a "closer" variable with the same
name
• Ada allows access to “hidden” vars
Copyright © 2018 Pearson. All rights reserved. 1-27
Blocks
– A method of creating static scopes inside program units--
from ALGOL 60
– Example in C:
void sub() {
int count;
while (...) {
int count;
count++;
...
}
…
}
- Note: legal in C and C++, but not in Java
and C# - too error-prone
Declaration Order
• C99, C++, Java, and C# allow variable
declarations to appear anywhere a statement
can appear
– In C99, C++, and Java, the scope of all local
variables is from the declaration to the end of the
block
– In the official documentation of C#, the scope of
any variable declared in a block is the whole block,
regardless of the position of the declaration in the
block
• However, that is misleading, because a variable still
must be declared before it can be used
Copyright © 2018 Pearson. All rights reserved. 1-28
Declaration Order (continued)
• In C++, Java, and C#, variables can be
declared in for statements
– The scope of such variables is restricted to the for
construct
Copyright © 2018 Pearson. All rights reserved. 1-29
Global Scope
• C, C++, PHP, and Python support a program
structure that consists of a sequence of
function definitions in a file
– These languages allow variable declarations to
appear outside function definitions
• C and C++have both declarations (just
attributes) and definitions (attributes and
storage)
– A declaration outside a function definition specifies
that it is defined in another file
Copyright © 2018 Pearson. All rights reserved. 1-30
Global Scope (continued)
• PHP
– Programs are embedded in HTML markup
documents, in any number of fragments, some
statements and some function definitions
– The scope of a variable (implicitly) declared in a
function is local to the function
– The scope of a variable implicitly declared outside
functions is from the declaration to the end of the
program, but skips over any intervening functions
• Global variables can be accessed in a function through
the $GLOBALS array or by declaring it global
Copyright © 2018 Pearson. All rights reserved. 1-31
Global Scope (continued)
• Python
– A global variable can be referenced in functions,
but can be assigned in a function only if it has
been declared to be global in the function
Copyright © 2018 Pearson. All rights reserved. 1-32
Copyright © 2018 Pearson. All rights reserved. 1-33
Evaluation of Static Scoping
• Works well in many situations
• Problems:
– In most cases, too much access is possible
– As a program evolves, the initial structure is
destroyed and local variables often become
global; subprograms also gravitate toward
become global, rather than nested
Copyright © 2018 Pearson. All rights reserved. 1-34
Dynamic Scope
• Based on calling sequences of program units,
not their textual layout (temporal versus
spatial)
• References to variables are connected to
declarations by searching back through the
chain of subprogram calls that forced
execution to this point
Copyright © 2018 Pearson. All rights reserved. 1-35
Scope Example
• Evaluation of Dynamic Scoping:
– Advantage: convenience
– Disadvantages:
1. While a subprogram is executing, its variables are
visible to all subprograms it calls
2. Impossible to statically type check
3. Poor readability- it is not possible to statically
determine the type of a variable
Copyright © 2018 Pearson. All rights reserved. 1-36
Scope and Lifetime
• Scope and lifetime are sometimes closely
related, but are different concepts
• Consider a static variable in a C or C++
function
Copyright © 2018 Pearson. All rights reserved. 1-37
Referencing Environments
• The referencing environment of a statement is the
collection of all names that are visible in the
statement
• In a static-scoped language, it is the local variables
plus all of the visible variables in all of the enclosing
scopes
• A subprogram is active if its execution has begun but
has not yet terminated
• In a dynamic-scoped language, the referencing
environment is the local variables plus all visible
variables in all active subprograms
Copyright © 2018 Pearson. All rights reserved. 1-38
Named Constants
• A named constant is a variable that is bound to a
value only when it is bound to storage
• Advantages: readability and modifiability
• Used to parameterize programs
• The binding of values to named constants can be
either static (called manifest constants) or dynamic
• Languages:
– C++ and Java: expressions of any kind, dynamically bound
– C# has two kinds, readonly and const
- the values of const named constants are bound at
compile time
- The values of readonly named constants are
dynamically bound
Copyright © 2018 Pearson. All rights reserved. 1-39
Summary
• Case sensitivity and the relationship of names to
special words represent design issues of names
• Variables are characterized by the sextuples: name,
address, value, type, lifetime, scope
• Binding is the association of attributes with program
entities
• Scalar variables are categorized as: static, stack
dynamic, explicit heap dynamic, implicit heap
dynamic
• Strong typing means detecting all type errors

More Related Content

PPT
5 Names, bindings,Typechecking and Scopes
PDF
Subprogram
PPT
pl12ch6.ppt
PPT
Theory of programming language chapter 6
DOCX
PPTX
Chapter-3 الشابتر الثالث هياكل بيانات جامعة خالد .pptx
PPT
pl10ch6_datatypesprinciplesof programing.ppt
PPTX
Improved Developer Productivity In JDK8
5 Names, bindings,Typechecking and Scopes
Subprogram
pl12ch6.ppt
Theory of programming language chapter 6
Chapter-3 الشابتر الثالث هياكل بيانات جامعة خالد .pptx
pl10ch6_datatypesprinciplesof programing.ppt
Improved Developer Productivity In JDK8

Similar to Theory of programming language chapter 5 (20)

PPT
6 data types
PPTX
a brief explanation on the topic of Imperative Programming Paradigm.pptx
PDF
Introduction To Perl - SpringPeople
PPT
L6.1 Primitive data types, array, records and union.ppt
PPTX
Introduction to Software - Coder Forge - John Mulhall
PPTX
unit-1(ppl notes) programing for problem.pptx
PPT
Pl9ch1
PDF
Variables: names, bindings, type, scope
PPTX
Apache Arrow: In Theory, In Practice
PPT
1.2 Evaluation of PLs.ppt
PPT
Ppt for engineering students PPL subject
PPTX
Cp 111 lecture 3
PPTX
Computer programing 111 lecture 3
PPT
CH # 1 preliminaries
PPT
java tutorial for beginners learning.ppt
PPT
Chapter14_Scripting_Languages_4e.power point presentation
PDF
A program _ is an abstraction in a programming language for the memor.pdf
PPTX
Localization and Shared Preferences in android
PPTX
Coding conventions
6 data types
a brief explanation on the topic of Imperative Programming Paradigm.pptx
Introduction To Perl - SpringPeople
L6.1 Primitive data types, array, records and union.ppt
Introduction to Software - Coder Forge - John Mulhall
unit-1(ppl notes) programing for problem.pptx
Pl9ch1
Variables: names, bindings, type, scope
Apache Arrow: In Theory, In Practice
1.2 Evaluation of PLs.ppt
Ppt for engineering students PPL subject
Cp 111 lecture 3
Computer programing 111 lecture 3
CH # 1 preliminaries
java tutorial for beginners learning.ppt
Chapter14_Scripting_Languages_4e.power point presentation
A program _ is an abstraction in a programming language for the memor.pdf
Localization and Shared Preferences in android
Coding conventions
Ad

Recently uploaded (20)

PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
Cloud computing and distributed systems.
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Approach and Philosophy of On baking technology
PDF
Machine learning based COVID-19 study performance prediction
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
cuic standard and advanced reporting.pdf
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PPT
Teaching material agriculture food technology
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PPTX
sap open course for s4hana steps from ECC to s4
PDF
Electronic commerce courselecture one. Pdf
PPTX
MYSQL Presentation for SQL database connectivity
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Diabetes mellitus diagnosis method based random forest with bat algorithm
Cloud computing and distributed systems.
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Programs and apps: productivity, graphics, security and other tools
Approach and Philosophy of On baking technology
Machine learning based COVID-19 study performance prediction
Unlocking AI with Model Context Protocol (MCP)
Mobile App Security Testing_ A Comprehensive Guide.pdf
cuic standard and advanced reporting.pdf
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Teaching material agriculture food technology
Reach Out and Touch Someone: Haptics and Empathic Computing
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
The Rise and Fall of 3GPP – Time for a Sabbatical?
sap open course for s4hana steps from ECC to s4
Electronic commerce courselecture one. Pdf
MYSQL Presentation for SQL database connectivity
“AI and Expert System Decision Support & Business Intelligence Systems”
Advanced methodologies resolving dimensionality complications for autism neur...
Ad

Theory of programming language chapter 5

  • 1. ISBN 0-321-49362-1 Chapter 5 Names, Bindings, and Scopes
  • 2. Copyright © 2018 Pearson. All rights reserved. 1-2 Chapter 5 Topics • Introduction • Names • Variables • The Concept of Binding • Scope • Scope and Lifetime • Referencing Environments • Named Constants
  • 3. Copyright © 2018 Pearson. All rights reserved. 1-3 Introduction • Imperative languages are abstractions of von Neumann architecture – Memory – Processor • Variables are characterized by attributes – To design a type, must consider scope, lifetime, type checking, initialization, and type compatibility
  • 4. Copyright © 2018 Pearson. All rights reserved. 1-4 Names • Design issues for names: – Are names case sensitive? – Are special words reserved words or keywords?
  • 5. Copyright © 2018 Pearson. All rights reserved. 1-5 Names (continued) • Length – If too short, they cannot be connotative – Language examples: • C99: no limit but only the first 63 are significant; also, external names are limited to a maximum of 31 • C# and Java: no limit, and all are significant • C++: no limit, but implementers often impose one
  • 6. Copyright © 2018 Pearson. All rights reserved. 1-6 Names (continued) • Special characters – PHP: all variable names must begin with dollar signs – Perl: all variable names begin with special characters, which specify the variable’s type – Ruby: variable names that begin with @ are instance variables; those that begin with @@ are class variables
  • 7. Names (continued) • Case sensitivity – Disadvantage: readability (names that look alike are different) • Names in the C-based languages are case sensitive • Names in others are not • Worse in C++, Java, and C# because predefined names are mixed case (e.g. IndexOutOfBoundsException) Copyright © 2018 Pearson. All rights reserved. 1-7
  • 8. Copyright © 2018 Pearson. All rights reserved. 1-8 Names (continued) • Special words – An aid to readability; used to delimit or separate statement clauses - A keyword is a word that is special only in certain contexts – A reserved word is a special word that cannot be used as a user-defined name – Potential problem with reserved words: If there are too many, many collisions occur (e.g., COBOL has 300 reserved words!)
  • 9. Copyright © 2018 Pearson. All rights reserved. 1-9 Variables • A variable is an abstraction of a memory cell • Variables can be characterized as a six tuples of attributes: – Name – Address – Value – Type – Lifetime – Scope
  • 10. Copyright © 2018 Pearson. All rights reserved. 1-10 Variables Attributes • Name - not all variables have them • Address - the memory address with which it is associated – A variable may have different addresses at different times during execution – A variable may have different addresses at different places in a program – If two variable names can be used to access the same memory location, they are called aliases – Aliases are created via pointers, reference variables, C and C++ unions – Aliases are harmful to readability (program readers must remember all of them)
  • 11. Copyright © 2018 Pearson. All rights reserved. 1-11 Variables Attributes (continued) • Type - determines the range of values of variables and the set of operations that are defined for values of that type; in the case of floating point, type also determines the precision • Value - the contents of the location with which the variable is associated - The l-value of a variable is its address - The r-value of a variable is its value • Abstract memory cell - the physical cell or collection of cells associated with a variable
  • 12. Copyright © 2018 Pearson. All rights reserved. 1-12 The Concept of Binding A binding is an association between an entity and an attribute, such as between a variable and its type or value, or between an operation and a symbol • Binding time is the time at which a binding takes place.
  • 13. Copyright © 2018 Pearson. All rights reserved. 1-13 Possible Binding Times • Language design time -- bind operator symbols to operations • Language implementation time-- bind floating point type to a representation • Compile time -- bind a variable to a type in C or Java • Load time -- bind a C or C++ static variable to a memory cell) • Runtime -- bind a nonstatic local variable to a memory cell
  • 14. Copyright © 2018 Pearson. All rights reserved. 1-14 Static and Dynamic Binding • A binding is static if it first occurs before run time and remains unchanged throughout program execution. • A binding is dynamic if it first occurs during execution or can change during execution of the program
  • 15. Copyright © 2018 Pearson. All rights reserved. 1-15 Type Binding • How is a type specified? • When does the binding take place? • If static, the type may be specified by either an explicit or an implicit declaration
  • 16. Copyright © 2018 Pearson. All rights reserved. 1-16 Explicit/Implicit Declaration • An explicit declaration is a program statement used for declaring the types of variables • An implicit declaration is a default mechanism for specifying types of variables through default conventions, rather than declaration statements • Basic, Perl, Ruby, JavaScript, and PHP provide implicit declarations – Advantage: writability (a minor convenience) – Disadvantage: reliability (less trouble with Perl)
  • 17. Explicit/Implicit Declaration (continued) • Some languages use type inferencing to determine types of variables (context) – C# - a variable can be declared with var and an initial value. The initial value sets the type – Visual Basic 9.0+, ML, Haskell, and F# use type inferencing. The context of the appearance of a variable determines its type Copyright © 2018 Pearson. All rights reserved. 1-17
  • 18. Copyright © 2018 Pearson. All rights reserved. 1-18 Dynamic Type Binding • Dynamic Type Binding (JavaScript, Python, Ruby, PHP, and C# (limited)) • Specified through an assignment statement e.g., JavaScript list = [2, 4.33, 6, 8]; list = 17.3; – Advantage: flexibility (generic program units) – Disadvantages: • High cost (dynamic type checking and interpretation) • Type error detection by the compiler is difficult
  • 19. Copyright © 2018 Pearson. All rights reserved. 1-19 Variable Attributes (continued) • Storage Bindings & Lifetime – Allocation - getting a cell from some pool of available cells – Deallocation - putting a cell back into the pool • The lifetime of a variable is the time during which it is bound to a particular memory cell
  • 20. Copyright © 2018 Pearson. All rights reserved. 1-20 Categories of Variables by Lifetimes • Static--bound to memory cells before execution begins and remains bound to the same memory cell throughout execution, e.g., C and C++ static variables in functions – Advantages: efficiency (direct addressing), history-sensitive subprogram support – Disadvantage: lack of flexibility (no recursion)
  • 21. Copyright © 2018 Pearson. All rights reserved. 1-21 Categories of Variables by Lifetimes • Stack-dynamic--Storage bindings are created for variables when their declaration statements are elaborated. (A declaration is elaborated when the executable code associated with it is executed) • If scalar, all attributes except address are statically bound – local variables in C subprograms (not declared static) and Java methods • Advantage: allows recursion; conserves storage • Disadvantages: – Overhead of allocation and deallocation – Subprograms cannot be history sensitive – Inefficient references (indirect addressing)
  • 22. Copyright © 2018 Pearson. All rights reserved. 1-22 Categories of Variables by Lifetimes • Explicit heap-dynamic -- Allocated and deallocated by explicit directives, specified by the programmer, which take effect during execution • Referenced only through pointers or references, e.g. dynamic objects in C++ (via new and delete), all objects in Java • Advantage: provides for dynamic storage management • Disadvantage: inefficient and unreliable
  • 23. Copyright © 2018 Pearson. All rights reserved. 1-23 Categories of Variables by Lifetimes • Implicit heap-dynamic--Allocation and deallocation caused by assignment statements – all variables in APL; all strings and arrays in Perl, JavaScript, and PHP • Advantage: flexibility (generic code) • Disadvantages: – Inefficient, because all attributes are dynamic – Loss of error detection
  • 24. Copyright © 2018 Pearson. All rights reserved. 1-24 Variable Attributes: Scope • The scope of a variable is the range of statements over which it is visible • The local variables of a program unit are those that are declared in that unit • The nonlocal variables of a program unit are those that are visible in the unit but not declared there • Global variables are a special category of nonlocal variables • The scope rules of a language determine how references to names are associated with variables
  • 25. Copyright © 2018 Pearson. All rights reserved. 1-25 Static Scope • Based on program text • To connect a name reference to a variable, you (or the compiler) must find the declaration • Search process: search declarations, first locally, then in increasingly larger enclosing scopes, until one is found for the given name • Enclosing static scopes (to a specific scope) are called its static ancestors; the nearest static ancestor is called a static parent • Some languages allow nested subprogram definitions, which create nested static scopes (e.g., Ada, JavaScript, Common Lisp, Scheme, Fortran 2003+, F#, and Python)
  • 26. Copyright © 2018 Pearson. All rights reserved. 1-26 Scope (continued) • Variables can be hidden from a unit by having a "closer" variable with the same name • Ada allows access to “hidden” vars
  • 27. Copyright © 2018 Pearson. All rights reserved. 1-27 Blocks – A method of creating static scopes inside program units-- from ALGOL 60 – Example in C: void sub() { int count; while (...) { int count; count++; ... } … } - Note: legal in C and C++, but not in Java and C# - too error-prone
  • 28. Declaration Order • C99, C++, Java, and C# allow variable declarations to appear anywhere a statement can appear – In C99, C++, and Java, the scope of all local variables is from the declaration to the end of the block – In the official documentation of C#, the scope of any variable declared in a block is the whole block, regardless of the position of the declaration in the block • However, that is misleading, because a variable still must be declared before it can be used Copyright © 2018 Pearson. All rights reserved. 1-28
  • 29. Declaration Order (continued) • In C++, Java, and C#, variables can be declared in for statements – The scope of such variables is restricted to the for construct Copyright © 2018 Pearson. All rights reserved. 1-29
  • 30. Global Scope • C, C++, PHP, and Python support a program structure that consists of a sequence of function definitions in a file – These languages allow variable declarations to appear outside function definitions • C and C++have both declarations (just attributes) and definitions (attributes and storage) – A declaration outside a function definition specifies that it is defined in another file Copyright © 2018 Pearson. All rights reserved. 1-30
  • 31. Global Scope (continued) • PHP – Programs are embedded in HTML markup documents, in any number of fragments, some statements and some function definitions – The scope of a variable (implicitly) declared in a function is local to the function – The scope of a variable implicitly declared outside functions is from the declaration to the end of the program, but skips over any intervening functions • Global variables can be accessed in a function through the $GLOBALS array or by declaring it global Copyright © 2018 Pearson. All rights reserved. 1-31
  • 32. Global Scope (continued) • Python – A global variable can be referenced in functions, but can be assigned in a function only if it has been declared to be global in the function Copyright © 2018 Pearson. All rights reserved. 1-32
  • 33. Copyright © 2018 Pearson. All rights reserved. 1-33 Evaluation of Static Scoping • Works well in many situations • Problems: – In most cases, too much access is possible – As a program evolves, the initial structure is destroyed and local variables often become global; subprograms also gravitate toward become global, rather than nested
  • 34. Copyright © 2018 Pearson. All rights reserved. 1-34 Dynamic Scope • Based on calling sequences of program units, not their textual layout (temporal versus spatial) • References to variables are connected to declarations by searching back through the chain of subprogram calls that forced execution to this point
  • 35. Copyright © 2018 Pearson. All rights reserved. 1-35 Scope Example • Evaluation of Dynamic Scoping: – Advantage: convenience – Disadvantages: 1. While a subprogram is executing, its variables are visible to all subprograms it calls 2. Impossible to statically type check 3. Poor readability- it is not possible to statically determine the type of a variable
  • 36. Copyright © 2018 Pearson. All rights reserved. 1-36 Scope and Lifetime • Scope and lifetime are sometimes closely related, but are different concepts • Consider a static variable in a C or C++ function
  • 37. Copyright © 2018 Pearson. All rights reserved. 1-37 Referencing Environments • The referencing environment of a statement is the collection of all names that are visible in the statement • In a static-scoped language, it is the local variables plus all of the visible variables in all of the enclosing scopes • A subprogram is active if its execution has begun but has not yet terminated • In a dynamic-scoped language, the referencing environment is the local variables plus all visible variables in all active subprograms
  • 38. Copyright © 2018 Pearson. All rights reserved. 1-38 Named Constants • A named constant is a variable that is bound to a value only when it is bound to storage • Advantages: readability and modifiability • Used to parameterize programs • The binding of values to named constants can be either static (called manifest constants) or dynamic • Languages: – C++ and Java: expressions of any kind, dynamically bound – C# has two kinds, readonly and const - the values of const named constants are bound at compile time - The values of readonly named constants are dynamically bound
  • 39. Copyright © 2018 Pearson. All rights reserved. 1-39 Summary • Case sensitivity and the relationship of names to special words represent design issues of names • Variables are characterized by the sextuples: name, address, value, type, lifetime, scope • Binding is the association of attributes with program entities • Scalar variables are categorized as: static, stack dynamic, explicit heap dynamic, implicit heap dynamic • Strong typing means detecting all type errors