Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational...

33
Subprogram ธธธธธธธ ธธธ ธธธธธ

Transcript of Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational...

Page 1: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

Subprogram

ธนวั�ฒน� แซ่เอี ยบ

Page 2: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

Subprograms as computational abstractions

Page 3: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

Basic notions

Page 4: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

General view of a subprogram

Page 5: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

A subprogram´s data

Page 6: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

Functions and procedures

Page 7: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

Example of a function

Page 8: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

General form of a function definition

Page 9: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

Formal parameters of functions

Page 10: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

Actual parameters and function calls

Page 11: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

Calling a function in a main program

Page 12: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

General form of a main program

Page 13: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

Rewriting the factorial function into a procedure

Page 14: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

General form of a procedure definition

Page 15: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

Generalizing parameter passing

Page 16: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

Models of Parameter Passing

Page 17: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

Parameter Passing Methods

• Implementation Models:

1. Pass-by-value (in mode)– Either by physical move or access path– Disadvantages of access path method:

• Must write-protect in the called subprogram

• Accesses cost more (indirect addressing)

– Disadvantages of physical move:• Requires more storage (duplicated space)

• Cost of the moves (if the parameter is large)

Page 18: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

Parameter Passing Methods

2. Pass-by-result (out mode)– Local’s value is passed back to the caller

– Physical move is usually used

– Disadvantages:

• If value is passed, time and space

• In both cases, order dependence may be a problem

e.g.

procedure sub1(y: int, z: int);

...

sub1(x, x);– Value of x in the caller depends on order of assignments at the return

Page 19: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

Parameter Passing Methods

3. Pass-by-value-result (inout mode)– Physical move, both ways– Also called pass-by-copy– Disadvantages:

• Those of pass-by-result• Those of pass-by-value

Page 20: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

Parameter Passing Methods

4. Pass-by-reference (inout mode)– Pass an access path– Also called pass-by-sharing– Advantage: passing process is efficient (no copying

and no duplicated storage)– Disadvantages:

• Slower accesses

Page 21: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

Parameter Passing Methods

• Pass-by-reference - disadvantages (cont)

b. Allows aliasing:i. Actual parameter collisions:

e.g. procedure sub1(a: int, b: int);

...

sub1(x, x);

Page 22: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

Example of Parameter Passing

• Consider the following C function

void swap1(int a, int b){

int temp = a;

a = b;

b = temp;

}• Suppose this function is called with

swap1(c,d);

ให้�เขี ยนควัามสั�มพั�นธ�ระห้วัางตั�วัแปรทั้��งห้มดทั้!กขี��นตัอีนทั้ #เก$ดขี%�น

Page 23: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

Example of Parameter Passing

Consider the following C function (pass by reference)

void swap2(int *a, int *b){

int temp = *a;

*a = *b;

*b = temp;

}

swap2 can be called with

swap2(&c, &d);

ให้�เขี ยนควัามสั�มพั�นธ�ระห้วัางตั�วัแปรทั้��งห้มดทั้!กขี��นตัอีนทั้ #เก$ดขี%�น

Page 24: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

Example of Parameter Passing

Consider the following C++ function (pass by reference)

void swap3(int &a, int &b){

int temp = a;

a = b;

b = temp;

}

swap3 can be called with

swap3(c, d);

ให้�เขี ยนควัามสั�มพั�นธ�ระห้วัางตั�วัแปรทั้��งห้มดทั้!กขี��นตัอีนทั้ #เก$ดขี%�น

Page 25: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

Memory states during program execution

1. At program start 2. Immediately after entering the procedddd 3. During the execution of the body 4. Immediately before leaving the procedur e 5. Immediately after leaving the procedur e

Page 26: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

A procedure with in/out parameters

Page 27: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

Handling of in/out parameters

Page 28: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

Memory states during program execution

Page 29: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

Memory states during program execution

1. At program start 2. Immediately after entering the procedddd 3. During the execution of the body 4. Immediately before leaving the procedur e 5. Immediately after leaving the procedur e

Page 30: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

Subprogram calls: control flow

Page 31: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

Execution trace

Page 32: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

Call stack

Page 33: Subprogram ธนวัฒน์ แซ่ เอียบ. Subprograms as computational abstractions.

ทั้ #มา• dddddddd ddddddddddd : RWTH

Aachen University• Concepts of programming

languages : Sebesta, Robert W.