CIS 4OO LECTURE 8

 

Declarations, (continued):

·        Choice representations

·        Storage management

·        Generic operators, (i.e. overloading operators)

·        Type checking

 

Constants:

·        Literal (i.e. "23")

·        Programmer defined

v     Can only simply defined variables be constants?

v     Can expression assign values to constants?

v     When is the value assigned?

v     Does language specify pre-defined constants, (pi, e, 'maxint')?

 

Instances of simple type:

·        Integer

·        Sub-range*, (i.e. x := 0…100;)

·        Floating point

·        Fixed point*

·        Rational numbers*

·        Complex numbers*

·        Enumeration*

·        Boolean*

( * = not likely to have hardware support)

 

Issues:

·        Initialization

·        Conversion/ coercion, (compiler attempting to convert data type)

·        Static and dynamic checking

 

®Structure type, (None of these are likely to have hardware support):

·        Vector

·        Multi-dimensional arrays

·        Records, ('structs')

·        Strings

·        Files

·        Pointers

 

 

 

 

Issues of structure type:

·        Specification

·        Operation

·        Implementation

v     Storage representation, (sequential vs. linked)

v     Garbage/ dangling reference

v     Efficient selection of components

·        Type checking

v     Component existence

v     Component type

 

Data control:

·        Language features affecting…

v     Visibility, (scope)

v     Accessibility, (extent of variable º lifetime, i.e. from allocation to deallocation)

v     Binding between an identifier and data operator or sub-projects

 

Data control concepts:

·        Reference environments

v     Local

v     Non-local, (i.e. 'friend', 'static', or header in C++. 'common block' in Fortran-SEE BELOW)

v     Global

v     Pre-defined, (pi, e, etc.)

·        Visibility

·        Dynamic scope

·        Reference operations-given an identifier and referencing environment, return associated data object, (pointers, et al)

 

EXAMPLE OF NON-LOCAL REFERENCE ENVIRONMENT:

 

 

Data control issues:

·        Aliasing, (more than one name or access path)

·        Dynamic scope-most recent association rule, (run time)

·        Static scope, (program text)

 

 

 

 

 

 

"Block structure" language scope rules, (ALGOL):

·        Declarations at the head of block define the local referencing environment for the block

·        References outside block are assumed to be in next larger block

·        References made to inner block identifiers are hidden from outer block

·        Block may be named, reference becomes part of outer block referencing environment

 

2 choices upon block exit:

1)      Deletion

2)      Retention, (history sensitivity)

 

 

Non-local referencing environments:

Explicit common:

·        Shared block of data

·        Declarations added to compiler table

 

Import/ export, (retention):

 

Procedure P(variables);

     Define x, y, z;   // w, y, and z are made available for export

     x, y, z : real

     u, v : integer

begin

     call Q

end

 

procedure Q(variables)

      uses P.x, P.z   // looks at procedure P and imports x and z

      y : integer

begin

     something happens

end