ch9: parameter passing
DESCRIPTION
Ch9: Parameter Passing. Outline. Subprograms Parameter Passing Parameter correspondence Main Issues when designing subroutine in programming languages Parameter passing techniques. Characteristics of Subprogram. Each program has a single entry point - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/1.jpg)
Ch9: Parameter Passing
![Page 2: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/2.jpg)
Outline
• Subprograms• Parameter Passing
– Parameter correspondence– Main Issues when designing subroutine in
programming languages– Parameter passing techniques
![Page 3: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/3.jpg)
Characteristics of Subprogram• Each program has a single entry point• The calling program unit is suspended during
execution of the called subprogram, which implies that there is only on subprogram in execution
• Control always return to the caller when subprogram execution terminates
• The two fundamental types of subprograms are:– procedure– functions
![Page 4: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/4.jpg)
Basic Definitions
• Structure or definition of a subprogram construct is:special-word name (list of parameter)
Fortran: subroutine Addr (parameters)Ada: procedure Addr (parameters)
C: void Addr (parameters)
![Page 5: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/5.jpg)
Parameters• Formal parameters -> parts of the specification• Actual parameters
ex) formal parametervoid swap (first, second) {
int temp; temp = first;
first = second; second = temp;
} end swap-------------------- actual parameterswap (x, y);
![Page 6: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/6.jpg)
Parameters• The parameters in the subprogram header are
called formal parameters.• Parameters include as arguments when the
subroutine is called are named actual parametersnote: a subroutine that return a value is called a function
• A subroutine that does not return a value is usually called a procedure or method
• Most programming languages require subroutine to be declared before they are used (forward)
![Page 7: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/7.jpg)
Parameter Correspondence
Establishing the correspondence between actual parameters and formal parameters
1. Positional CorrespondenceThe correspondence is established by pairing actual and formal parameters based on the positions of the actual and formal parameter list.
![Page 8: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/8.jpg)
Parameter Correspondence
2. Correspondence by explicit nameIn Ada the formal parameter is paired with each actual parameter they may be named explicitly in the calling statement.example:
sub (y => B, x=> 32); formal actual
![Page 9: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/9.jpg)
Parameter Correspondence
3. Mixed keyword (Explicit name) and positional • Most languages that support keyword
parameters allow both: Ada, Fortran, Dylan, Python
• The first parameter in a list can be positional, and the remainder can be keyword parameters.ex)
my_sub (Length, sub=>B, List =>my_array);
![Page 10: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/10.jpg)
Parameter Correspondence
4. Optimal parameters• Formal parameter list includes default
values to be used if the corresponding actual parameter is missing.
• This gives a very short way of writing certain kinds of overloaded function definitions
![Page 11: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/11.jpg)
Example in C++
int f( int a =1, int b=2, int c=3) {body}
int f() { f(1, 2, 3); }int f( int a) { f(a, 2, 3); }int f( int a, int b) { f(a, b, 3); }int f( int a, int b, int c) { f(a, b, c); }
![Page 12: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/12.jpg)
Unlimited Parameter Lists• Some languages allow actual parameter lists of
unbounded length: C, C++, and scripting languages like JavaScript, Python, and Perl
• Library routines must be used to access the excess actual parameters
• A hole in static type systems, since the types of the excess parameters cannot be checked at compile time
int printf (char *format, .....) { body }
![Page 13: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/13.jpg)
Example in Ada
function Compute_Pay (Income : Float; Exemptions : Integer := 1;
Tax_Rate : Float) return Float;
Pay := Compute_Pay (2000.0, Tax_Rate => 0.15);
![Page 14: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/14.jpg)
Main Issues when designing subroutine in programming languages
• What parameter passing methods are used?• Are the types of the actual parameters checked
against the types of the formal parameters?• Check for error condition• Are local variables statically or dynamically
allocated?• Can subroutines definitions appear on other
subroutines definitions?
![Page 15: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/15.jpg)
Main Issues when designing subroutine in programming languages (cont)
• Can subroutines can be passed as parameters?• Can subroutines be nested?• If passed as parameters and/or nested, what is
the referencing environment of a passed parameter?
• Can a subroutine be generic?
![Page 16: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/16.jpg)
Parameter Passing Technique 1Pass-by-Value• The value of the actual parameter is associated
with the formal parameter• It is initialized using the value of the
corresponding actual parameter, before the called method begins executing
• Simplest method• Widely used• The only method in real Java• Changing to a formal parameter do not affect the
actual parameter
![Page 17: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/17.jpg)
Changes Visible to the Caller• When parameters are passed by value, changes
to a formal do not affect the actual • But it is still possible for the called method to
make changes that are visible to the caller• The value of the paramter could be a pointer( in
Java, a reference)• Then the actual cannot be changed, but the
object referred to by the actual can be
![Page 18: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/18.jpg)
Example for Pass by Value (1)int plus(int a, int b) { a += b; return a;}
void f() { int x = 3; int y = 4; int z = plus(x, y);}
CurrentActivation record
a : 3
b : 4
return address
Previous Activation record
Result
x : 3 y : 4 z : ?
return address
PreviousActivation record
When plusIs starting
![Page 19: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/19.jpg)
Example for Pass by Value (2)
name formal parameter type result
function square(x : integer) : integer begin
square := x * x end
square(2) => 4
![Page 20: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/20.jpg)
Example for Pass by Value (3)procedure swap(a, b); integer a, b, temp; begin temp
temp := a; a := b; b := temp; end; y
swap(x, y); x effect
![Page 21: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/21.jpg)
Parameter Passing Technique 2Pass-by-Result• The formal parameter is just like a local variable
in the activation record of the called procedure( it is uninitialized)
• After the called method finish execution, the final value of the formal parameter is assigned to the corresponding actual parameter
• It is also called copy-out• It was introduced in ALGOL 68• Sometimes used in Ada
![Page 22: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/22.jpg)
Example for Pass by Resultvoid plus (int a, int b, by-result int c){ c = a + b;}
void f(){ int x = 3; int y = 4; int z; plus(x, y, z);}
current AR
a : 3
b : 4
c : ?
RA
Previous AR
x : 3
y : 4
z : ?
RA
Previous AR
1
When plus is starting
![Page 23: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/23.jpg)
Example cont.
current AR
a : 3
b : 4
c : 7
RA
Previous AR
x : 3
y : 4
z : ?
RA
Previous AR
x : 3
y : 4
z : 7
RA
Previous AR
2 3when plus is ready to return
When plushas returned
current AR
![Page 24: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/24.jpg)
Parameter Passing Technique 3
Pass-by-Value Result• The formal parameter is just like a local variable
in the activation record of the called procedure• After the called method finish execution, the final
value of the formal parameter is assigned to the corresponding actual parameter
• It is also called copy-in/copy-out• It is initialized using the value of the
corresponding actual parameter, before the called method begins execution
![Page 25: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/25.jpg)
Example for Pass by Value Result
void plus(int a, by-value-result int b){ b += a;}
void f(){ int x = 3; plus(4, x);}
current AR a : 4
b : 3
RA
PAR
x : 3
RA
PAR
1When plusis starting
![Page 26: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/26.jpg)
Example cont.
current AR
a = 4
b = 7
RA
PAR
x = 3
RA
PAR
x = 7
RA
PAR
2 3When plus isready to return
When plushas returned
![Page 27: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/27.jpg)
Parameter Passing Technique 4
Pass-by-Reference• The address of the actual parameter is
passed to the called method. This address is used as the formal parameter.
• The formal parameter is an alias for the formal parameter
• One of the earliest methods: Fortran• Most efficient for large object• Still frequently used
![Page 28: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/28.jpg)
Picture
x reference value
b reference value
x reference value
b reference
copy-incopy-out
![Page 29: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/29.jpg)
Example for Pass by Reference (1)
void plus (int a, by-reference int b) { b += a;}
void f() { int x = 3; plus(4, x);}
CAR
a = 4
b
RA
PAR
x = 3
RA
PAR
CAR
a = 4
b = 7
RA
PAR
x = 7
RA
PAR
11 When plus Is starting
2When plus isReady to return
![Page 30: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/30.jpg)
Implementing Referencevoid plus( int a, by-reference int b) {
b += a;} previous examplevoid f() {
int x = 3;plus( 4, x );}
void plus (int a, int *b) {*b += a;
}void f() { C implementation
int x = 3;plus(4, &x); By-reference = address by value
}
![Page 31: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/31.jpg)
Aliasing• When two expressions have the same lvalue,
they are aliases of each other• There are obvious cases:
ConsCell x = new ConsCell (0, null);ConsCell y = x;
A[ i ] = A[ j ] + A[ k ];
• Passing by reference leads to less obvious cases...
![Page 32: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/32.jpg)
Example for Pass by Reference (2)
void sigsum( by-reference int n, by-reference int ans) {ans = 0;int I = I;while ( i <= n) ans +=i ++;
}
Int f() { int g() {int x, y; int x;x = 10; x = 10;sigsum (x, y); sigsum (x, x);return y; return x;
} }
![Page 33: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/33.jpg)
Example contvoid sigsum(by-reference int n, by-reference int ans) {
ans = 0;int i = 1;while (i <= n) ans += i++;
}int g() {
int x;x = 10;sigsum(x, x);return x;
}
CAR
n :ans :i : ?RA
PAR
X : 10
RAPAR
Result : ?
When sigsumIs starting
![Page 34: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/34.jpg)
Parameter Passing Technique 5Pass-by-Name• Each actual parameter is evaluated in the
caller’s context, on every use of the corresponding formal parameter
• Introduce in ALGOL 60• Now unpopular• The actual parameters is treated like a “Little
anonymous function” (Thunk)• Whenever the called method needs the value of
the formal, it calls the Thunk to get it.
![Page 35: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/35.jpg)
Example for Pass by Name (1)procedure swap(a, b); integer a, b, temp; begin temp := a; a := b; b := temp; end
5 3 11 10 12 . . . . A
0 1 2 3 4
A[3] = 10 I = 2
![Page 36: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/36.jpg)
Example 1 cont.swap(I, A[3]){ temp := 2 I := A[3] = 10 A[10] := temp}
swap(I, A[I]){ temp := 2 I := A[2] = 10 A[10] := temp}
![Page 37: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/37.jpg)
Example for Pass by Name (2)void f( by-name int a, by-name int b){ b = 5; b = a;}
int g(){ int i = 3; f ( i + 1, i ); return;}
CAR
a:
b:
RA
PAR
i = 3
RA
PAR
result?
i
i + 1 Thunk
(Final value of a is 6)
Thunk
when f() is starting
![Page 38: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/38.jpg)
Jensen’s DeviceReal procedure sum(j, lo, hi, Exp) Value lo, hi; Real Exp; Integers j, lo, hi; Begin Real RTN; RTN := 0; FOR I = lo step 1 UNTIL hi do RTN := RTN + Exp; SUM : = RTM End
x[ i ] * i
![Page 39: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/39.jpg)
Jensen’s Device Exampley =
i = 1
10
3x - 5x + 22
y = sum(x, I, 10, 3 * x * x - 5 * x + 2)
Each time through the loop, evaluation of the expressionis actually the evaluation of
3x - 5x + 22
Procedure swap (a, b); Integer a, b, temp; Begin temp := a; a := b; b := temp; End
![Page 40: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/40.jpg)
Jensen’s Device Example cont.
Effect of calling swap(i, x[i]) Before the call: i = 2, x[2] = 5What do we expect: i = 5, x[2] = 2After the call: i = 5, x[2] = 5, x[5] = 2
side effect
i = 2 x[i] = 5
temp 2i A[i] = 2A[i] = A[5] = 2
![Page 41: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/41.jpg)
ThunksFunction XjThunk() : Real address VAR Expi : Real Begin Expi := x[ i ] * i XjThunk := address(Expi) End
![Page 42: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/42.jpg)
Specification Issues
• Are these just implementation techniques, or part of the language specification?
• Depends on the language:– Without side-effects, parameter-passing
technique may be undetectable by the programmer
– Even with side effects, some languages specify the parameter passing technique only partially
![Page 43: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/43.jpg)
Without Side Effects
• Big question are parameters always evaluated, or only if they are really needed?
• Cost model may also be used by the programmer– Is re-evaluation of a formal expensive?– Does parameter-passing take time
proportional to the size of the object?
![Page 44: Ch9: Parameter Passing](https://reader035.vdocuments.site/reader035/viewer/2022070503/56816254550346895dd29e5b/html5/thumbnails/44.jpg)
With Side Effects
• A program can detect which parameter-passing technique is being used by the language system
• But it may be an implementation detail that programs are not supposed to depend on: it may not be part of the specification of the language
• Case in point: Ada