ISBN 0-321-19362-8 Chapter 9 Subprograms. Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-2 Chapter 9 Topics Introduction Fundamentals.

Slides:



Advertisements
Similar presentations
ICE1341 Programming Languages Spring 2005 Lecture #16 Lecture #16 In-Young Ko iko.AT. icu.ac.kr iko.AT. icu.ac.kr Information and Communications University.
Advertisements

Overview Fundamentals of Subprograms (Sec )
Chapter 9 Subprograms Specification: name, signature, actions Signature: number and types of input arguments, number and types of output results –Book.
ISBN Chapter 9 Subprograms. Copyright © 2007 Addison-Wesley. All rights reserved.1-2 Chapter 9 Topics Introduction Fundamentals of Subprograms.
Chapter 9 Subprograms.
1 CHAPTER 9 SUBPROGRAM. 2 SUBPROGRAM Topics: b Definitions of subprogram b general subprogram characteristics b parameters b Functions and procedures.
Chapter 9 Subprograms.
Chapter 9 Subprograms.
Chapter 9 Subprogram Control Consider program as a tree- –Each parent calls (transfers control to) child –Parent resumes when child completes –Copy rule.
Chapter 9 Subprograms Sections 1-5 and 9. Copyright © 2007 Addison-Wesley. All rights reserved. 1–2 Introduction Two fundamental abstraction facilities.
ISBN Chapter 10 Implementing Subprograms.
ISBN Chapter 10 Implementing Subprograms.
ISBN Chapter 10 Implementing Subprograms.
ISBN Chapter 9 Subprograms. Copyright © 2006 Addison-Wesley. All rights reserved.1-2 Introduction Two fundamental abstraction facilities.
1 CSCI 360 Survey Of Programming Languages 9 – Implementing Subprograms Spring, 2008 Doug L Hoffman, PhD.
Chapter 10 Implementing Subprograms. Copyright © 2007 Addison-Wesley. All rights reserved. 1–2 Semantics of Call and Return The subprogram call and return.
ISBN Chapter 9 Subprograms and Functions –Design Issues –Local Referencing Environments –Parameter-Passing Methods –Parameters that are Subprogram.
© 2003 G. Drew Kessler and William M. Pottenger1 Subroutines (Part 1) CSE 262, Spring 2003.
ISBN Chapter 10 Implementing Subprograms.
1 Subprograms Fundamentals of subprograms Design issues for subprograms –Parameter-passing methods –Type checking of parameters –Static or dynamic storage.
Chapter 9 Subprograms.
Chapter 9 Subprograms. Copyright © 2012 Addison-Wesley. All rights reserved.1-2 Chapter 9 Topics Introduction Fundamentals of Subprograms Design Issues.
ISBN Chapter 9 Subprograms. Copyright © 2007 Addison-Wesley. All rights reserved.1-2 Chapter 9 Topics Introduction Fundamentals of Subprograms.
Chapter Nine: Subprograms Lesson 09. What are they  Modularized code  Might return a value  Functions  Or not  Procedures  Subroutines  In object.
Subprograms Support process abstraction and modularity –characteristics of subprograms are that they have a single entry point the calling entity is suspended.
Chapter 9 Subprograms Fundamentals of Subprograms
Chapter 10 Implementing Subprograms. Copyright © 2012 Addison-Wesley. All rights reserved.1-2 Chapter 10 Topics The General Semantics of Calls and Returns.
April 23, ICE 1341 – Programming Languages (Lecture #16) In-Young Ko Programming Languages (ICE 1341) Lecture #16 Programming Languages (ICE 1341)
1 Chapter 9 © 2002 by Addison Wesley Longman, Inc. 9.2 Fundamentals of Subprograms - General characteristics of subprograms: 1. A subprogram has a single.
1 Copyright © 1998 by Addison Wesley Longman, Inc. Chapter 8 Fundamental Characteristics of Subprograms 1. A subprogram has a single entry point 2. The.
1 CS Programming Languages Class 15 October 17, 2000.
CSC3315 (Spring 2008)1 CSC 3315 Subprograms Hamid Harroud School of Science and Engineering, Akhawayn University
Week 7 Subprograms. Copyright © 2006 Addison-Wesley. All rights reserved.1-2 Chapter 9 Topics Introduction Fundamentals of Subprograms Design Issues for.
Subprograms subroutines, procedures, functions, methods.
ISBN Chapter 9 Subprograms. Copyright © 2015 Pearson. All rights reserved.1-2 Chapter 9 Topics Introduction Fundamentals of Subprograms.
1 Languages and Compilers (SProg og Oversættere) Bent Thomsen Department of Computer Science Aalborg University With acknowledgement to Angela Guercio.
1 Subprograms In Text: Chapter 8. 2 Chapter 8: Subprograms Outline Definitions Referencing environments Parameter passing modes and mechanisms Independent.
Chapter 9 Subprograms. 2 Fundamentals of Subprograms Each subprogram has a single entry point The calling program is suspended during execution of the.
C HAPTER 9 Subprograms. CCSB314 Programming Language C HAPTER 9 T OPICS Introduction Fundamentals of Subprograms Design Issues for Subprograms Local Referencing.
ISBN Chapter 10 Implementing Subprograms.
Implementing Subprograms What actions must take place when subprograms are called and when they terminate? –calling a subprogram has several associated.
ISBN Chapter 9 Subprograms Sections
Chapter 9 Subprograms. Copyright © 2006 Addison-Wesley. All rights reserved.1-2 Chapter 9 Topics Introduction Fundamentals of Subprograms Design Issues.
Chapter 9: Subprograms Introduction Fundamentals of Subprograms
ISBN Chapter 9 Subprograms. Corrected and improved by Assoc. Prof. Zeki Bayram, EMU, North Cyprus. Original Copyright © 2007 Addison-Wesley.
9-1 Chapter 9 Subprograms Topics Fundamentals of Subprograms Design Issues for Subprograms Local Referencing Environments Parameter-Passing Methods Parameters.
Chapter 10 Implementing Subprograms. Copyright © 2012 Addison-Wesley. All rights reserved.1-2 Chapter 10 Topics The General Semantics of Calls and Returns.
10-1 Chapter 10: Implementing Subprograms The General Semantics of Calls and Returns Implementing “Simple” Subprograms Implementing Subprograms with Stack-Dynamic.
ISBN Chapter 10 Implementing Subprograms.
Implementing Subprograms
第九章 副程式 (Subprograms). 淡江大學資訊管理系侯永昌 1 Introduction §Two fundamental abstraction facilities l Process abstraction (this chapter) : by subprogram, increase.
ISBN Chapter 10 Implementing Subprograms.
Chapter 9 Chapter 9 Subprograms. The Structure of Run-Time Memory.
ISBN Chapter 10 Implementing Subprograms.
ISBN Chapter 9 Subprograms. Copyright © 2007 Addison-Wesley. All rights reserved.1-2 Chapter 9 Topics Introduction Fundamentals of Subprograms.
Chapter 9 Subprograms. Chapter 9 Topics Introduction Fundamentals of Subprograms Design Issues for Subprograms Local Referencing Environments Parameter-Passing.
Chapter 9 Subprograms.
Chapter 9 Subprograms.
CSCI 3370: Principles of Programming Languages Chapter 9 Subprograms
Chapter 9 Subprograms.
Chapter 9 Subprograms.
Chapter 9: Subprograms Sangho Ha
Subprograms In Text: Chapter 9.
Subject : T0152 – Programming Language Concept
Chapter 9 Subprograms Fundamentals of Subprograms
Chapter 9 Subprograms.
Chapter 9 Subprograms.
Chapter 9 Subprograms Subprograms are the fundamental building blocks of programs and are therefore the most important concepts in programming language.
Presentation transcript:

ISBN Chapter 9 Subprograms

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-2 Chapter 9 Topics Introduction Fundamentals of Subprograms Design Issues for Subprograms Local Referencing Environments Parameter-Passing Methods Parameters that are Subprogram Names Overloaded Subprograms Generic Subprograms Design Issues for Functions User-Defined Overloaded Operators Coroutines

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-3 Introduction Two fundamental abstraction facilities –Process abstraction (this chapter) –Data abstraction (Chapter 11)

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-4 Fundamentals of Subprograms General characteristics of subprograms: 1. A subprogram has a single entry point 2. The caller is suspended during execution of the called subprogram 3. Control always returns to the caller when the called subprogram’s execution terminates

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-5 Fundamentals of Subprograms Basic definitions: –A subprogram definition is a description of the actions of the subprogram abstraction –A subprogram call is an explicit request that the subprogram be executed –A subprogram header is the first line of the definition, including the name, the kind of subprogram, and the formal parameters –The parameter profile of a subprogram is the number, order, and types of its parameters

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-6 Fundamentals of Subprograms Basic definitions (continued): –The protocol of a subprogram is its parameter profile plus, if it is a function, its return type –A subprogram declaration provides the protocol, but not the body, of the subprogram –A formal parameter is a dummy variable listed in the subprogram header and used in the subprogram –An actual parameter represents a value or address used in the subprogram call statement

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-7 Fundamentals of Subprograms Actual/Formal Parameter Correspondence: 1. Positional 2. Keyword –e.g. SORT(LIST => A, LENGTH => N); –Advantage: order is irrelevant –Disadvantage: user must know the formal parameter’s names –Default Values: e.g. procedure SORT(LIST : LIST_TYPE; LENGTH : INTEGER := 100);... SORT(LIST => A);

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-8 Fundamentals of Subprograms Procedures provide user-defined statements Functions provide user-defined operators

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-9 Design Issues for Subprograms 1. What parameter passing methods are provided? 2. Are parameter types checked? 3. Are local variables static or dynamic? 4. Can subprogram definitions appear in other subprogram definitions?

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-10 Design Issues for Subprograms 5. What is the referencing environment of a passed subprogram? 6. Can subprograms be overloaded? 7. Are subprograms allowed to be generic?

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-11 Local referencing environments If local variables are stack-dynamic: –Advantages: a. Support for recursion b. Storage for locals is shared among some subprograms –Disadvantages: a. Allocation/deallocation time b. Indirect addressing c. Subprograms cannot be history sensitive Static locals are the opposite

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-12 Local referencing environments Language Examples: 1. FORTRAN 77 and 90 - most are static, but the implementor can choose either (User can force static with SAVE ) 2. C - both (variables declared to be static are) (default is stack dynamic) 3. Pascal, Java, and Ada - dynamic only

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-13 Parameter Passing Methods We discuss these at several different levels: –Semantic models: in mode, out mode, inout mode –Conceptual models of transfer: 1. Physically move a value 2. Move an access path

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-14 Models of Parameter Passing

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-15 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)

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-16 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

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-17 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

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-18 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

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-19 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);

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-20 Parameter Passing Methods Pass-by-reference - disadvantages (cont) ii. Array element collisions: e.g. sub1(a[i], a[j]); /* if i = j */ Also, sub2(a, a[i]); (a different one) iii. Collision between formals and globals –Root cause of all of these is: The called subprogram is provided wider access to nonlocals than is necessary –Pass-by-value-result does not allow these aliases (but has other problems!)

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-21 Parameter Passing Methods 5. Pass-by-name (multiple mode) –By textual substitution –Formals are bound to an access method at the time of the call, but actual binding to a value or address takes place at the time of a reference or assignment –Purpose: flexibility of late binding

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-22 Parameter Passing Methods 5. Pass-by-name (multiple mode continued) –Resulting semantics: If actual is a scalar variable, it is pass-by-reference If actual is a constant expression, it is pass-by-value If actual is an array element, it is like nothing else e.g. procedure sub1(x: int; y: int); begin x := 1; y := 2; x := 2; y := 3; end; sub1(i, a[i]);

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-23 Parameter Passing Methods 5. Pass-by-name (multiple mode, continued) –If actual is an expression with a reference to a variable that is also accessible in the program, it is also like nothing else e.g. (assume k is a global variable) procedure sub1(x: int; y: int; z: int); begin k := 1; y := x; k := 5; z := x; end; sub1(k+1, j, i);

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-24 Parameter Passing Methods Disadvantages of pass by name: –Very inefficient references –Too tricky; hard to read and understand Language Examples: 1. FORTRAN –Before 77, pass-by-reference –77 - scalar variables are often passed by value- result 2. ALGOL 60 –Pass-by-name is default; pass-by-value is optional

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-25 Parameter Passing Methods 3. ALGOL W –Pass-by-value-result 4. C –Pass-by-value 5. Pascal and Modula-2 –Default is pass-by-value; pass-by-reference is optional 6. C++ –Like C, but also allows reference type parameters, which provide the efficiency of pass-by-reference with in-mode semantics

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-26 Parameter Passing Methods 7. Ada –All three semantic modes are available –If out, it cannot be referenced –If in, it cannot be assigned 8. Java –Like C++, except only references

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-27 Parameter Passing Methods Type checking parameters (now considered very important for reliability) –FORTRAN 77 and original C: none –Pascal, FORTRAN 90, Java, and Ada: it is always required –ANSI C and C++: choice is made by the user

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-28 Parameter Passing Methods Implementing Parameter Passing –ALGOL 60 and most of its descendants use the run-time stack –Value - copy it to the stack; references are indirect to the stack –Result - same –Reference - regardless of form, put the address in the stack –Name - run-time resident code segments or subprograms evaluate the address of the parameter; called for each reference to the formal; these are called thunks Very expensive, compared to reference or value-result

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-29 Stack Implementation of Parameter-Passing

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-30 Parameter Passing Methods Ada –Simple variables are passed by copy (value-result) –Structured types can be either by copy or reference –This can be a problem, because a) Of aliases (reference allows aliases, but value-result does not) b) Procedure termination by error can produce different actual parameter results Programs with such errors are “erroneous”

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-31 Parameter Passing Methods Multidimensional Arrays as Parameters –If a multidimensional array is passed to a subprogram and the subprogram is separately compiled, the compiler needs to know the declared size of that array to build the storage mapping function

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-32 Parameter Passing Methods C and C++ –Programmer is required to include the declared sizes of all but the first subscript in the actual parameter –This disallows writing flexible subprograms –Solution: pass a pointer to the array and the sizes of the dimensions as other parameters; the user must include the storage mapping function, which is in terms of the size parameters

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-33 Parameter Passing Methods Pascal –Not a problem (declared size is part of the array’s type) Ada –Constrained arrays - like Pascal –Unconstrained arrays - declared size is part of the object declaration (Java is similar)

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-34 Parameter Passing Methods Pre-90 FORTRAN –Formal parameter declarations for arrays can include passed parameters, e.g. SUBPROGRAM SUB(MATRIX, ROWS, COLS, RESULT) INTEGER ROWS, COLS REAL MATRIX (ROWS, COLS), RESULT... END

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-35 Parameter Passing Methods Design Considerations for Parameter Passing 1. Efficiency 2. One-way or two-way –These two are in conflict with one another! –Good programming => limited access to variables, which means one-way whenever possible –Efficiency => pass by reference is fastest way to pass structures of significant size –Also, functions should not allow reference parameters

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-36 Parameters that are Subprogram Names Issues: 1. Are parameter types checked? –Early Pascal and FORTRAN 77 do not –Later versions of Pascal and –FORTRAN 90 do –Ada does not allow subprogram parameters –Java does not allow method names to be passed –as parameters –C and C++ - pass pointers to functions; parameters can be type checked

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-37 Parameters that are Subprogram Names 2. What is the correct referencing environment for a subprogram that was sent as a parameter? –Possibilities: a. It is that of the subprogram that enacted it –Shallow binding b. It is that of the subprogram that declared it –Deep binding c. It is that of the subprogram that passed it –Ad hoc binding (Has never been used)

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-38 Parameters that are Subprogram Names For static-scoped languages, deep binding is most natural For dynamic-scoped languages, shallow binding is most natural

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-39 Example: sub1 sub2 sub3 call sub4(sub2) sub4(subx) call subx call sub3 What is the referencing environment of sub2 when it is called in sub4 ? –Shallow binding => sub2, sub4, sub3, sub1 –Deep binding => sub2, sub1 Parameters that are Subprogram Names

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-40 Overloaded Subprograms Def: An overloaded subprogram is one that has the same name as another subprogram in the same referencing environment C++ and Ada have overloaded subprograms built-in, and users can write their own overloaded subprograms

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-41 Generic Subprograms A generic or polymorphic subprogram is one that takes parameters of different types on different activations Overloaded subprograms provide ad hoc polymorphism A subprogram that takes a generic parameter that is used in a type expression that describes the type of the parameters of the subprogram provides parametric polymorphism

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-42 Generic Subprograms Examples of parametric polymorphism 1. Ada –Types, subscript ranges, constant values, etc., can be generic in Ada subprograms and packages, e.g. generic type ELEMENT is private; type VECTOR is array (INTEGER range <>) of ELEMENT; procedure GENERIC_SORT(LIST: in out VECTOR);

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-43 Generic Subprograms procedure GENERIC_SORT(LIST: in out VECTOR) is TEMP : ELEMENT; begin for INDEX_1 in LIST'FIRST.. INDEX_1'PRED(LIST'LAST) loop for INDEX_2 in INDEX'SUCC(INDEX_1).. LIST'LAST loop if LIST(INDEX_1) > LIST(INDEX_2) then TEMP := LIST (INDEX_1); LIST(INDEX_1) := LIST(INDEX_2); LIST(INDEX_2) := TEMP; end if; end loop; -- for INDEX_1... end loop; -- for INDEX_2... end GENERIC_SORT;

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-44 Generic Subprograms procedure INTEGER_SORT is new GENERIC_SORT( ELEMENT => INTEGER; VECTOR => INT_ARRAY);

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-45 Generic Subprograms Ada generics are used to provide the functionality of parameters that are subprograms; generic part is a subprogram Example: generic with function FUN(X : FLOAT) return FLOAT; procedure INTEGRATE(LOWERBD : in FLOAT; UPPERBD : in FLOAT; RESULT : out FLOAT);

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-46 Generic Subprograms procedure INTEGRATE(LOWERBD : in FLOAT; UPPERBD : in FLOAT; RESULT : out FLOAT) is FUNVAL : FLOAT; begin... FUNVAL := FUN(LOWERBD);... end; INTEGRATE_FUN1 is new INTEGRATE(FUN => FUN1);

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-47 Generic Subprograms Examples of parametric polymorphism 2. C++ –Templated functions e.g. template Type max(Type first, Type second) { return first > second ? first : second; }

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-48 Generic Subprograms C++ template functions are instantiated implicitly when the function is named in a call or when its address is taken with the & operator Another example: template void generic_sort(Type list[], int len) { int top, bottom; Type temp;

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-49 Generic Subprograms for (top = 0; top < len - 2; top++) for (bottom = top + 1; bottom < len - 1; bottom++) { if (list[top] > list[bottom]) { temp = list [top]; list[top] = list[bottom]; list[bottom] = temp; } //** end of for (bottom =... } //** end of generic_sort

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-50 Generic Subprograms Example use: float flt_list[100];... generic_sort(flt_list, 100); // Implicit instantiation

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-51 Separate & Independent Compilation Def: Independent compilation is compilation of some of the units of a program separately from the rest of the program, without the benefit of interface information Def: Separate compilation is compilation of some of the units of a program separately from the rest of the program, using interface information to check the correctness of the interface between the two parts.

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-52 Separate & Independent Compilation Language Examples: –FORTRAN II to FORTRAN 77 - independent –FORTRAN 90, Ada, C++, Java - separate –Pascal - allows neither

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-53 Design Issues for Functions 1. Are side effects allowed? a. Two-way parameters (Ada does not allow) b. Nonlocal reference (all allow) 2. What types of return values are allowed?

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-54 Design Issues for Functions Language Examples (for possible return types): 1. FORTRAN, Pascal - only simple types 2. C - any type except functions and arrays 3. Ada - any type (but subprograms are not types) 4. C++ and Java - like C, but also allow classes to be returned

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-55 Accessing Nonlocal Environments Def: The nonlocal variables of a subprogram are those that are visible but not declared in the subprogram Def: Global variables are those that may be visible in all of the subprograms of a program

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-56 Accessing Nonlocal Environments Methods: 1. FORTRAN COMMON blocks –The only way in pre-90 FORTRANs to access nonlocal variables –Can be used to share data or share storage 2. Static scoping - discussed in Chapter 5

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-57 Accessing Nonlocal Environments Methods (continued): 3. External declarations - C –Subprograms are not nested –Globals are created by external declarations (they are simply defined outside any function) –Access is by either implicit or explicit declaration –Declarations (not definitions) give types to externally defined variables (and say they are defined elsewhere)

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-58 Accessing Nonlocal Environments Methods (continued): 4. External modules - Ada –More about these later (Chapter 11) 5. Dynamic Scope - discussed in Chapter 5

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-59 User-Defined Overloaded Operators Nearly all programming languages have overloaded operators Users can further overload operators in C++ and Ada (Not carried over into Java)

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-60 User-Defined Overloaded Operators Example (Ada) (assume VECTOR_TYPE has been defined to be an array type with INTEGER elements): function "*"(A, B : in VECTOR_TYPE) return INTEGER is SUM : INTEGER := 0; begin for INDEX in A'range loop SUM := SUM + A(INDEX) * B(INDEX); end loop; return SUM; end "*"; Are user-defined overloaded operators good or bad?

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-61 Coroutines A coroutine is a subprogram that has multiple entries and controls them itself Also called symmetric control A coroutine call is named a resume The first resume of a coroutine is to its beginning, but subsequent calls enter at the point just after the last executed statement in the coroutine

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-62 Coroutines Typically, coroutines repeatedly resume each other, possibly forever Coroutines provide quasi-concurrent execution of program units (the coroutines) Their execution is interleaved, but not overlapped

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-63 Coroutines

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-64 Coroutines

Copyright © 2004 Pearson Addison-Wesley. All rights reserved.9-65 Coroutines