1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes,...

30
1 Names, Scopes and Names, Scopes and Bindings Bindings
  • date post

    20-Dec-2015
  • Category

    Documents

  • view

    217
  • download

    0

Transcript of 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes,...

Page 1: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

11

Names, Scopes and Names, Scopes and BindingsBindings

Page 2: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

22

NamesNames Kinds of names Kinds of names

Variables, functions, classes, types, Variables, functions, classes, types, labels, blocks, operators, tasks, etc. labels, blocks, operators, tasks, etc.

Binding associates a names with an Binding associates a names with an objectobject

A Name is an abstraction of an objectA Name is an abstraction of an object Classes are type abstractionsClasses are type abstractions Variables are data abstractionsVariables are data abstractions Subroutines are control abstractionsSubroutines are control abstractions

Name Spaces Name Spaces separate lists of names, separate lists of names, structstruct ids in C ids in C

Page 3: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

33

BindingBinding Binding TimesBinding Times

Language Design timeLanguage Design time KeywordsKeywords Built-in TypesBuilt-in Types

Compile TimeCompile Time Binding variables to locations in memoryBinding variables to locations in memory

Load TimeLoad Time Static linking Static linking

Run TimeRun Time Interpreted Languages e.g., SmalltalkInterpreted Languages e.g., Smalltalk Dynamic linkingDynamic linking PolymorphismPolymorphism

Late binding => flexibilityLate binding => flexibility Early binding => safetyEarly binding => safety

Page 4: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

44

Object LifetimeObject Lifetime A short biography of an ObjectA short biography of an Object

Creation of Object – instantiation Creation of Object – instantiation Creation of Names – declaration Creation of Names – declaration Binding Name and ObjectBinding Name and Object Destruction of BindingsDestruction of Bindings Destruction of ObjectsDestruction of Objects

Storage Allocation MechanismsStorage Allocation Mechanisms Static objects – exist throughout execution of Static objects – exist throughout execution of

programprogram Constants, global values, static members in CConstants, global values, static members in C staticstatic keyword overloaded, multiple meanings keyword overloaded, multiple meanings

Heap objects – explicitly createdHeap objects – explicitly created Garbage collected or explicitly deleted Garbage collected or explicitly deleted

Stack objects – exist within a blockStack objects – exist within a block

Page 5: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

55

Stack AllocationStack Allocation Function CallsFunction Calls

Compiler determines size of stack frameCompiler determines size of stack frame Prologue and EpilogPrologue and Epilog Parameters Parameters Local VariablesLocal Variables Temporary (compiler generated) variablesTemporary (compiler generated) variables Bookkeeping informationBookkeeping information

Stack frame pushed onto stack when function is called at Stack frame pushed onto stack when function is called at run-timerun-time

Stack frame popped off stack when function returnsStack frame popped off stack when function returns Stack allocation for declarations in block Stack allocation for declarations in block

statementsstatements Advantages of Stack AllocationAdvantages of Stack Allocation

Allocation is automatic Allocation is automatic Reentrant – allows for recursive callsReentrant – allows for recursive calls Space & Time efficientSpace & Time efficient Guarantees no side effectsGuarantees no side effects

Page 6: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

66

Heap AllocationHeap Allocation Heap is random access memoryHeap is random access memory

Sequentially addressed memorySequentially addressed memory Requires Memory Management System Requires Memory Management System

Allocation must be explicit Allocation must be explicit mallocmalloc() – in C; () – in C; newnew in C++ & Java in C++ & Java Can be expensiveCan be expensive Deallocation can be explicit or Garbage Deallocation can be explicit or Garbage

CollectedCollected Susceptible to Problems Susceptible to Problems

Memory leaksMemory leaks Memory fragmentationMemory fragmentation Dangling referencesDangling references

Page 7: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

77

Scope Scope Scope is the region over which a binding is Scope is the region over which a binding is

activeactive Examples:Examples:

Function Scope – labels Function Scope – labels Block (Local) Scope Block (Local) Scope File Scope in C & C++File Scope in C & C++ Package Scope in Java Package Scope in Java Class ScopeClass Scope

Static (Lexical) scope – Binding at compile Static (Lexical) scope – Binding at compile timetime

Dynamic scope – Binding at run-timeDynamic scope – Binding at run-time

Page 8: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

88

Static ScopeStatic Scope Most common: Most common:

C, C++, Java, etc.C, C++, Java, etc. Binding determined by (lexical) structure Binding determined by (lexical) structure

of programof program void Foo (char x) {void Foo (char x) { char c = ‘a’;char c = ‘a’; Fum (x);Fum (x); }} void Fum(char y) {void Fum(char y) { c = y; c = y; Error Error }}

Page 9: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

99

Nested SubroutinesNested Subroutines

Supported in Pascal, Ada, MLSupported in Pascal, Ada, ML Useful for “helper” functions Useful for “helper” functions functionfunction m m return Integer isreturn Integer is { {

x x is Integeris Integer;; functionfunction sub1 sub1 return Integer isreturn Integer is { {

x := 1x := 1 }} sub1();sub1(); returnreturn x; x;

}} Requires a static chain of pointers or a display to Requires a static chain of pointers or a display to

keep track of environments on the stackkeep track of environments on the stack

Page 10: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

1010

Static ChainsStatic Chains

A() {A() {

B() {B() {

C() {}C() {}

D() {}D() {}

}}

E() {}E() {}

}} Nested Calls:Nested Calls:

A, E, B, D, CA, E, B, D, C

CC

DD

BB

EE

AA

Page 11: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

1111

Dynamic ScopeDynamic Scope

Scope determined at run-timeScope determined at run-time APL, Snobol, PerlAPL, Snobol, Perl

A variable local to a calling function A variable local to a calling function will be available in the called will be available in the called function.function.

Requires dynamic chain of pointers Requires dynamic chain of pointers to keep track of calling environmentsto keep track of calling environments

Page 12: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

1212

Static vs Dynamic ScopeStatic vs Dynamic Scope1.1. a : integer -- global declarationa : integer -- global declaration2.2. procedure firstprocedure first3.3. a := 1a := 14.4. procedure secondprocedure second5.5. a: integera: integer6.6. first()first()7.7. a := 2a := 28.8. if read_integer() > 0if read_integer() > 09.9. second()second()10.10. elseelse11.11. first()first()12.12. write_integer(a) write_integer(a) What is the result under Static Scope?What is the result under Static Scope? What is the result under Dynamic Scope?What is the result under Dynamic Scope?

Page 13: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

1313

VisibilityVisibility

A Binding may be temporarily hidden A Binding may be temporarily hidden by a more local binding.by a more local binding.

Linkage – names must be exported Linkage – names must be exported to be visibleto be visible

Hidden declarations may be Hidden declarations may be referenced using a referenced using a qualified namequalified nameint x = 0;int x = 0;int y = Super.x; int y = Super.x;

Page 14: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

1414

Name OverloadingName Overloading

Same name used for more than one Same name used for more than one distinct functiondistinct function

Built-in operatorsBuilt-in operators Example: 1.0 + 2.0 and 1 + 2Example: 1.0 + 2.0 and 1 + 2

Function (or operator) names Function (or operator) names resolved using actual argument resolved using actual argument typestypes Name Mangling in C++Name Mangling in C++

Page 15: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

1515

Access ControlAccess Control Declaration is in scope and not Declaration is in scope and not

hidden, but access is controlledhidden, but access is controlled Applies to class membersApplies to class members

Private – only accessible in Private – only accessible in thisthis class class Public – access available throughout scopePublic – access available throughout scope Protected – accessible in this class and its Protected – accessible in this class and its

subclassessubclasses Package – accessible in all classes in Package – accessible in all classes in

packagepackage

Page 16: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

1616

Type CheckingType Checking

Page 17: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

1717

What’s in a TypeWhat’s in a Type

A type is (possibly infinite) set of values and A type is (possibly infinite) set of values and the set of valid operations on those valuesthe set of valid operations on those values

Integer – infinite set of discrete values and operators, Integer – infinite set of discrete values and operators, e.g., succ(), pred(), +, -, *, /, etc.e.g., succ(), pred(), +, -, *, /, etc.

A Type System is a set of formal rules that A Type System is a set of formal rules that defines a type, including rules for defines a type, including rules for Constructing a new instance of the typeConstructing a new instance of the type Determining type equivalence between valuesDetermining type equivalence between values Determining type compatibility between values Determining type compatibility between values Defining and applying operators Defining and applying operators

Page 18: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

1818

Type DeclarationType Declaration Not all languages require explicit type Not all languages require explicit type

delcaration:delcaration: Type implicit in name Type implicit in name

Perl: $ => scalar, @ => arrayPerl: $ => scalar, @ => array Basic: $ => stringBasic: $ => string

Type inferred from contextType inferred from context x + 1.0;x + 1.0;

Type associated with values, rather than namesType associated with values, rather than names x := “abc”; x := 2.0; x + 1.0; x := “abc”; x := 2.0; x + 1.0;

Explicit declaration may not be necessary, Explicit declaration may not be necessary, but: but: Makes program easier to understand Makes program easier to understand Avoids common errors such as misspelling an Avoids common errors such as misspelling an

identifieridentifier

Page 19: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

1919

Type Declaration (2)Type Declaration (2)

What does a type declaration do?What does a type declaration do?aa is arrayis array (1..10) (1..10) of Integerof Integer Defines set of valid operations on Defines set of valid operations on aa Defines set of valid operations on elements of Defines set of valid operations on elements of aa

Establishes size of Establishes size of aa in memory in memory Registers Registers aa in symbol table in symbol table Determines scope of Determines scope of aa May allocate storage and bind name to objectMay allocate storage and bind name to object

Page 20: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

2020

*1*1stst, 2, 2nd nd & 3& 3rdrd Class values Class values

First class valuesFirst class values Can be passed as parametersCan be passed as parameters Can be stored in variablesCan be stored in variables

Second class valuesSecond class values Cannot be passed as parametersCannot be passed as parameters Can be stored in variablesCan be stored in variables

Third class valuesThird class values Cannot be passed as parametersCannot be passed as parameters Cannot be stored in variablesCannot be stored in variables

Page 21: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

2121

Type CheckingType Checking

Use of incompatible types is called a “type Use of incompatible types is called a “type clash”clash”Example: Example: a is Array (1..10) of Integer;a is Array (1..10) of Integer;

a[20] := ‘a’;a[20] := ‘a’; Statically typed: Statically typed:

Type errors detectable at compile time Type errors detectable at compile time Most Algol-style languagesMost Algol-style languages

Dynamically typedDynamically typed Type errors detected at run-timeType errors detected at run-time Scheme, Smalltalk Scheme, Smalltalk

Static typing is preferable but not always Static typing is preferable but not always possiblepossible

Page 22: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

2222

Strong vs Weak TypingStrong vs Weak Typing Strongly typed LanguagesStrongly typed Languages

Type rules strictly enforced at compile timeType rules strictly enforced at compile time Ada, JavaAda, Java

Weakly typed languagesWeakly typed languages Possibly unsafe type conversion permitted Possibly unsafe type conversion permitted Assembly, CAssembly, C

Type Equivalence of composite typesType Equivalence of composite types Structural vs. Name equivalenceStructural vs. Name equivalence

Type CompatibilityType Compatibility CoercionCoercion PromotionPromotion PolymorphismPolymorphism

Page 23: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

2323

*Type Semantics*Type Semantics

Denotational SemanticsDenotational Semantics A type is a set of values A type is a set of values Operations are values of type Operations are values of type where where and and are type variables are type variables

ConstructiveConstructive Built-in or constructed from built-in typesBuilt-in or constructed from built-in types Everything reduces to built-in types and Everything reduces to built-in types and

operationsoperations Abstraction-based (Operational)Abstraction-based (Operational)

A type is a set of abstract operationsA type is a set of abstract operations

Page 24: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

2424

Type InferenceType Inference

x = 1 + f(‘a’);x = 1 + f(‘a’); What is the type of f()? What is the type of f()? What is the type of x? What is the type of x? How do we know?How do we know?

Page 25: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

2525

A little more AdaA little more Ada

Page 26: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

2626

PragmasPragmas

A pragma is a message for the A pragma is a message for the compilercompiler Pragma inlinePragma inline name – requests that name – requests that

function be compiled inlinefunction be compiled inline Pragma OptimizePragma Optimize ( (TimeTime | | SpaceSpace | | OffOff))

Page 27: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

2727

Union TypesUnion Types The union type in CThe union type in C

union u_if { int x; float f; }union u_if { int x; float f; } Large enough to hold largest memberLarge enough to hold largest member Either int or float, but which?Either int or float, but which?

Programmer needs to keep trackProgrammer needs to keep trackstruct {struct {

int u_type;int u_type; union {union {

int ival;int ival; float fval;float fval; char* cval;char* cval; }}} values;} values;

Page 28: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

2828

Discriminated Types in AdaDiscriminated Types in Ada

A record can have discriminants:A record can have discriminants: typetype IF IF isis (Int, Float); (Int, Float);

typetype Int_Float (V : IF := Int) Int_Float (V : IF := Int) is recordis record casecase V V isis whenwhen Int => Int_Val : Integer; Int => Int_Val : Integer; whenwhen Float => Float_Val : Float; Float => Float_Val : Float; end caseend case;;end recordend record;;

Now the value of the discriminant V Now the value of the discriminant V shows what type is currently presentshows what type is currently present

Page 29: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

2929

More on Discriminated More on Discriminated RecordsRecords

Referencing a discriminanted typeReferencing a discriminanted type Puzzle : Int_Float;Puzzle : Int_Float;

……Puzzle := (Float, 1.0);Puzzle := (Float, 1.0);F := Puzzle.Float_Val; F := Puzzle.Float_Val; -- OK-- OKI := Puzzle.Int_Val; I := Puzzle.Int_Val; -- raise exception-- raise exception……Puzzle.V := Int; Puzzle.V := Int; -- not allowed! -- not allowed!

Page 30: 1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,

3030

More on Discriminated More on Discriminated RecordsRecords

Can make subtypesCan make subtypes subtypesubtype PuzzleI PuzzleI isis puzzle (Int); puzzle (Int);

-- this type only holds int values-- this type only holds int values Can dimension arrays from discriminant:Can dimension arrays from discriminant:

Subtype Vlen is Integer range 1 .. 10;Subtype Vlen is Integer range 1 .. 10;type Vstr (Vlen : Integer := 0) is recordtype Vstr (Vlen : Integer := 0) is record Data : String (1 .. Vlen); Data : String (1 .. Vlen);end record;end record;VV : Vstr := (5, “hello”);VV : Vstr := (5, “hello”);