Simple subprogram call-
Subprograms cannot be recursive.
Explicit call statements are required.
Not in exception handlers.
Subprograms must execute completely at
each call .
Not like a coroutine which continues
execution from the point of its last
termination each time it is called. 2
Immediate transfer of control at point of
Not like a scheduled subprogram call,
execution of the subprogram may be deferred
until some later time.
Single execution sequence.
Not like tasks which may execute
concurrently so that several are in execution
subprograms that return values directly.
procedure or subroutine calls
operate only through side effects on shared
Are identical in the sequence-control
structures they require.
Subprogram definition, activation.
code segment: executable code, constants.
Activation record: local data, parameters, …
code segment is invariant, each
activation uses it.
Activation record is created and
destroyed, and constantly changing.
We must talk of:
execution of S during activation R of the
CIP: Current-Instruction Pointer.
some point in code segment
CEP: Current-Environment Pointer.
To the activation record being used, the
How a program is
An activation record for the main program
CEP points to it.
CIP points to the first instruction of it.
Interpreter goes to work …
when a call is reached …
return point (ip,ep) stored in the
activation record of the called
subprogram. (p.290, fig.7.1.) 7
One important property of the copy-rule
view of subprograms: at most one
activation of any subprogram is in use at
any point during program execution.
static allocation, code segment extension .
CIP is enough.
P.292, fig. 7.2.
The recursive call creates a second
activation of the subprogram during the
lifetime of the first activation.
CEP and CIP
Pascal and C : use stack always
PL/1: just for recursive subprograms.
The dynamic chain of pointers.
Ep values : a linked list , links the
activation records on the central stack in
order of their dynamic creation.
CEP: the top A.R.
ep value of CEPs return point: the 2nd
last ep: the main program. 10
7.2. Attributes of Data
Accessibility of data at different points
during program execution.
Y may be a local or nonlocal variable
we must know scope rules for declarations:
if Y is a formal parameter, parameter
if Y is a parameterless subprogram,mechanisms
for returning results.
Names and Referencing
Two ways that a data object can be made
available as an operand for an operation:
Is used for data control within expressions.
Data object is allocated storage temporarily
during its lifetime, without any name.
Like 2*Z in X:=Y+2*Z.
Referencing through a named data object.
Most data controls outside of expressions .
A name ; or a name of a larger data object with a
Program elements that
may be named
Variable names. *
Formal parameter names. *
Subprogram names. *
Names for defined types.
Names for defined constants.
Statement labels (names for statements).
Names for primitive operations, e.g., + , * ,SQRT.
Names for literal constants, e.g., 17, 3.25.
simple name: designating an entire data
composite name: a name for a component of
a data structure. (a name and a selection)
Association: binding of identifiers(simple
names) to particular data objects and
1. at the beginning of execution of the
main program, associations are
made(variables and subprograms).
2. During execution of main program, it
invokes referencing operations, to
determine the particular data object or
subprogram associated with an identifier.
3. when each subprogram is called, a new
set of associations is created.
4. It invokes referencing operations too.
5. When the subprogram return, its
associations are destroyed.
6. The main program continues ...
For each program or subprogram: A set of
identifier associations available for use in
referencing during execution.
Invariant during one activation.
Set up when the subprogram activation is
Local referencing environment.
Created on entry to a subprogram.
Nonlocal referencing environment.
Not Created on entry to a subprogram.
Global referencing environment.
A part of n.l.e., main program.
Predefined referencing environment.
Defined directly in the language definition.
Visibility : an association for an identifier
is said to be visible within a subprogram if
it is part of the referencing environment
for that subprogram.
Hidden if redefined.
dynamic scope: dynamic scope of an
association consists of the set of
subprogram activations within which it is
Referencing operation: an operation with
ref-op: id*referencing-environment -> data object or subprogram
Local, nonlocal, and global references.
If the association is local ...
Aliases for data objects
More than one name for a data object
in several link lists
aliasing makes understanding a program
P.300 fig. 7.4.
The Dynamic scope of an association for
an identifier, is the set of subprogram
activations in which the association is
visible during execution.
A Dynamic scope rule defines the dynamic
scope of each association in terms of the
dynamic course of program execution.
For example you can define it according to
the dynamic chain of subprogram activations.
The static scope of a declaration is that
part of the program text where a use of
the identifier is a reference to that
particular declaration of the id.
A static scope rule is a rule for
determining the static scope of a
For example the rule used in Pascal.
You can make no use of static scope
The importance of static scope.
Static type checking: faster and more
Reading a program easier.
Ada, C, FORTRAN, Pascal
In a block-structured language, each
program or subprogram is organized as a
set of nested blocks.
Introducing a new local referencing
environment. P.304, fig. 7.5.
Static scope rules
1. Head of each block.
2. Immediately enclosed the first block.
…up too the predefined language env., and then an
3. Inner ones encapsulate dcl.s
4. Named block can be referenced.
Every reference to a name ,associated to a unique dcl. 27
Local data and local
Local environment consists of
ids in the head of Q (but not Q),
formal parameter names,
Retention and deletion
p.306,307…, fig. 7.6,7,8,9
some points about retention/deletion :
absence of recursion=> implementation is
static and automatic in PL/1
a subprogram name: retained
a formal parameter name: deleted
recursive subprogram calls=> deleted
more storage space
less storage space
7.3. Shared Data in
Sharing of data objects :
direct sharing through parameter
through nonlocal environments
explicit common environments and implicit
Parameter and Parameter
When we use parameters and when we
use nonlocal reference?
p.313, a table of different kinds of actual parameters
Establishing the correspondence
by explicit name
in Ada: Sub(Y=>B, X=>27);
Methods for Transmitting
Call by name
call by reference
call by value
call by value-result
call by constant value
call by result
Call by name
the actual parameter is to be substituted
everywhere for the formal parameter in
the body of the called program before
execution of the subprogram begins.
If we have call Sub(X)
Actual parameter X, as a simple
Solve the ambiguity if X is already a 35
Call by reference
A pointer to the location of the data
object is made available to the
The data object, doesn’t change position.
Call by value
Upon invoking a subprogram, the value is
passed (r-value ).
the formal parameter contains the value
that is used.
Call by value-result
The formal par. Is a local var. of the same
type as the actual par.
Like call by value, but the result is copied
in the actual par. at the end.
Call by constant value
No change in the value of the formal par.
Is allowed during prog. Execution.
If transmitted to another subprogram it
must be by constant value too.
Just an input.
Call by result
The formal par. Is a local var. with no
The result is copied in the actual par. at
FORTRAN: only call by ref.
Pascal : both (var keyword)
C: only call by value.
Rather than mode of transmission, role of
in, out, in out
elementary data types
in: constant value
out, in out: value-result
composite data types : by reference 42
Explicit function values
An extra implicit out parameter from the
In C: return 2*x
In Pascal: fn:=2*x
In activation record.
Each formal par. P is a local data object.
a local data object of type T (type of actual
a pointer to a data object of type T .
at the point of call : actual par.s evaluated.
at the point of entry and exit:
prologue: complete the transmission.
epilogue: copy the result values (in transmissions
by result or value-result).
transmission of par.s.
static type checking.