CSE 3302 Programming Languages

Slides:



Advertisements
Similar presentations
Procedures. 2 Procedure Definition A procedure is a mechanism for abstracting a group of related operations into a single operation that can be used repeatedly.
Advertisements

Semantic Analysis Chapter 6. Two Flavors  Static (done during compile time) –C –Ada  Dynamic (done during run time) –LISP –Smalltalk  Optimization.
Programming Languages and Paradigms
Parameter Passing. Variables: lvalues and rvalues In the assignment statement “X=Y”, variables X and Y are being used in different ways. Y is being used.
Slide 1 Vitaly Shmatikov CS 345 Functions. slide 2 Reading Assignment uMitchell, Chapter 7 uC Reference Manual, Chapters 4 and 9.
COP4020 Programming Languages Subroutines and Parameter Passing Prof. Xin Yuan.
PZ09B Programming Language design and Implementation -4th Edition Copyright©Prentice Hall, PZ09B - Parameter transmission Programming Language Design.
Chapter 9 Subprograms Specification: name, signature, actions Signature: number and types of input arguments, number and types of output results –Book.
CPSC 388 – Compiler Design and Construction Parameter Passing.
Chapter 5 ( ) of Programming Languages by Ravi Sethi
Subprogram Control - Data sharing Mechanisms to exchange data Arguments - data objects sent to a subprogram to be processed. Obtained through  parameters.
Lecture 16 Subroutine Calls and Parameter Passing Semantics Dragon: Sec. 7.5 Fischer: Sec Procedure declaration procedure p( a, b : integer, f :
(1) ICS 313: Programming Language Theory Chapter 10: Implementing 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.
ALGOL 60 Design by committee of computer scientists: Naur, Backus, Bauer, McCarthy, van Wijngaarden, Landin, etc. Design by committee of computer scientists:
Runtime Environments Source language issues Storage organization
ISBN Chapter 9 Subprograms. Copyright © 2006 Addison-Wesley. All rights reserved.1-2 Introduction Two fundamental abstraction facilities.
PSUCS322 HM 1 Languages and Compiler Design II Parameter Passing Material provided by Prof. Jingke Li Stolen with pride and modified by Herb Mayer PSU.
Chapter 9: Subprogram Control
Parameter Passing. Expressions with lvalues and rvalues An expression has an lvalue/rvalue if it can be placed on the left/right side of an assignment.
Week 8-9b spring 2002CSCI337 Organization of Prog. Lang0 A Brief Recap Subprogram benefits, basic characteristics from names to their values  names can.
Overview Parameter passing modes.
ISBN Chapter 9 Subprograms and Functions –Design Issues –Local Referencing Environments –Parameter-Passing Methods –Parameters that are Subprogram.
CSC321: Programming Languages1 Programming Languages Tucker and Noonan Chapter 9: Functions 9.1 Basic Terminology 9.2 Function Call and Return 9.3 Parameters.
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 9 Functions It is better to have 100 functions.
Imperative Programming. Heart of program is assignment statements Aware that memory contains instructions and data values Commands: variable declarations,
© 2003 G. Drew Kessler and William M. Pottenger1 Subroutines (Part 1) CSE 262, Spring 2003.
Chapter 8 :: Subroutines and Control Abstraction
Chapter 7: Runtime Environment –Run time memory organization. We need to use memory to store: –code –static data (global variables) –dynamic data objects.
Compiler Principle and Technology Prof. Dongming LU April 11th, 2014.
Runtime Environments What is in the memory? Runtime Environment2 Outline Memory organization during program execution Static runtime environments.
CS 2104 Prog. Lang. Concepts Subprograms
Programming Languages and Design Lecture 7 Subroutines and Control Abstraction Instructor: Li Ma Department of Computer Science Texas Southern University,
Semantics CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University
Compiler Construction
Chapter 9 Subprograms Fundamentals of Subprograms
Chapter 9 Functions It is better to have 100 functions operate on one data structure than 10 functions on 10 data structures. A. Perlis.
Basic Semantics Associating meaning with language entities.
CSC3315 (Spring 2008)1 CSC 3315 Subprograms Hamid Harroud School of Science and Engineering, Akhawayn University
Subprograms subroutines, procedures, functions, methods.
1 Records Record aggregate of data elements –Possibly heterogeneous –Elements/slots are identified by names –Elements in same fixed order in all records.
Programming Languages and Paradigms Imperative Programming.
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.
Run-Time Storage Organization Compiler Design Lecture (03/23/98) Computer Science Rensselaer Polytechnic.
RUN-Time Organization Compiler phase— Before writing a code generator, we must decide how to marshal the resources of the target machine (instructions,
CS 261 – Data Structures Introduction to C Programming.
CSE 425: Control Abstraction I Functions vs. Procedures It is useful to differentiate functions vs. procedures –Procedures have side effects but usually.
Semantics CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University
Copyright © 2006 The McGraw-Hill Companies, Inc. Basic Terminology Value-returning functions: –known as “non-void functions/methods” in C/C++/Java –called.
Slide 1 Dr. Mohammad El-Ramly Fall 2010 Set 7- II - Functions Slides by Vitaly Shmatikov Cairo University Faculty of Computers and Information CS317 Concepts.
CS 536 Parameter Passing 1. Roadmap Last Time – Storing variables Locals, non-locals, globals This Time – Propagating values from one function to another.
CSC 8505 Compiler Construction Runtime Environments.
Functions Illustration of: Pass by value, reference Scope Allocation Reference: See your CS115/215 textbook.
Chapter 9: Subprograms Introduction Fundamentals of Subprograms
Procedure Definitions and Semantics Procedures support control abstraction in programming languages. In most programming languages, a procedure is defined.
1 CSC 533: Programming Languages Spring 2014 Subprogram implementation  subprograms (procedures/functions/subroutines)  subprogram linkage  parameter.
Run-Time Environments Presented By: Seema Gupta 09MCA102.
Run-Time Environments Chapter 7
Functions.
CSE 3302 Programming Languages
CSE 3302 Programming Languages
CSE 3302 Programming Languages
Semantics CSE 340 – Principles of Programming Languages Spring 2016
CSE 3302 Programming Languages
UNIT V Run Time Environments.
CSE 3302 Programming Languages
CSE 3302 Programming Languages
CSE 3302 Programming Languages
Presentation transcript:

CSE 3302 Programming Languages Control II Procedures and Environments Chengkai Li, Weimin He Spring 2008 Lecture 10 – Control II, Spring 2008 1 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Procedures vs. Functions no side effect return a value Function call: expression Procedure: side effect, executed for it no return value Procedure call: statement No clear distinction made in most languages C/C++: void Ada/FORTRAN/Pascal: procedure/function Lecture 10 – Control II, Spring 2008 2 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Syntax Terminology: body specification interface name type of return value parameters (names and types) int f(int y); //declaration int f(int y){ //definition int x; x=y+1; return x; } int f(int y) { int x; x=y+1; return x; } Lecture 10 – Control II, Spring 2008 3 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Procedure Call Caller: Callee: … int f(int y){ f(a); int x; … if (y==0) return 0; x=y+1; return x; } Control transferred from caller to callee, at procedure call Transferred back to caller when execution reaches the end of body Can return early Lecture 10 – Control II, Spring 2008 4 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Environment Environment: binding from names to their attributes stack static(global) area heap (unallocated) automatically-allocated spaces (local variables, procedures (chapter 8) under the control of runtime system both for dynamic binding manually-allocated spaces under the control of programmer Lecture 10 – Control II, Spring 2008 5 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Activation Record for Nested Blocks Activation record: memory allocated for the local objects of a block Entering a block: activation record allocated Exit from inner block to surrounding block: activation record released int x; //global { int x,y; x = y*10; { int i; i = x/2; } } x x y Lecture 10 – Control II, Spring 2008 6 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Activation Record for Nested Blocks int x; //global { int x,y; x = y*10; { int i; i = x/2; } } x x y X: Nonlocal variable, in the surrounding activation record i Lecture 10 – Control II, Spring 2008 7 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Activation Record for Procedures int x; //global void B(void) { int i; i = x/2; } void A(void) { int x,y; x = y*10; B(); } main() { A(); return 0; } x x y Lecture 10 – Control II, Spring 2008 8 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Activation Record for Procedures int x; //global void B(void) { int i; i = x/2; } void A(void) { int x,y; x = y*10; B(); } main() { A(); return 0; } x x x: global variable in defining environment y i Need to retain information in calling environment Lecture 10 – Control II, Spring 2008 9 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Activation Record for Procedures int x; //global void B(void) { int i; i = x/2; } void A(void) { int x,y; x = y*10; B(); } main() { A(); return 0; } i: local variable in called environment x: global variable in defining environment x x y x,y: local variable in calling environment i Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Activation Record for Procedures int x; //global void B(void) { int i; i = x/2; } void A(void) { int x,y; x = y*10; B(); } main() { A(); return 0; } Can only access global variables in defining environment No direct access to the local variables in the calling environment (Need to communicate through parameters) x x y i Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Procedure Call Caller: Callee: Parameter Passing Mechanisms: … int f(int a){ f(i); ...; … ...a...; ...; } actual parameter / argument formal parameter / argument Parameter Passing Mechanisms: When and how to evaluate parameters How actual parameter values are passed to formal parameters How formal parameter values are passed back to actual parameters Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Parameter Passing Mechanisms Pass/Call by Value Pass/Call by Reference Pass/Call by Value-Result Pass/Call by Name Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Example What is the result? It depends… void swap(int a, int b) { int temp; temp = a; a = b; b = temp; } main(){ int i=1, j=2; swap(i,j); printf(“i=%d, j=%d\n”, i, j); } It depends… Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Pass by Value Caller: Callee: … int f(int a){ f(i); ...a...; … } i a … } i a Most common one Replace formal parameters by the values of actual parameters Actual parameters: No change Formal parameters: Local variables (C, C++, Java, Pascal) Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Example: Pass By Value i 1 j 2 a b i 1 j 2 a b i 1 j 2 a b void swap(int a, int b) { int temp; temp = a; a = b; b = temp; } main(){ int i=1, j=2; swap(i,j); printf(“i=%d, j=%d\n”, i, j); i 1 j 2 a b i 1 j 2 a b i 1 j 2 a b Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Are these Pass-by-Value? C: void f(int *p) { *p = 0; } void f(int a[]) { a[0]=0; } Java: void f(Vector v) { v.removeAll(); } Yes! Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Pass-by-Value: Pointers C: void f(int *p) { *p = 0; } main() { int *q; q = (int *) malloc(sizeof(int)); *q = 1; f(q); printf("%d\n", q[0]); } q ? q 1 p q ? 1 p q 1 p q Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Pass-by-Value: Pointers C: void f(int *p) { p = (int *) malloc(sizeof(int)); *p = 0; } main() { int *q; q = (int *) malloc(sizeof(int)); *q = 1; f(q); printf("%d\n", q[0]); } What happens here? Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Pass-by-Value: Arrays C: void f(int p[]) { p[0] = 0;} main() { int q[10]; q[0]=1; f(q); printf("%d\n", q[0]); } What happens here? Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Pass-by-Value: Arrays C: void f(int p[]) { p=(int *) malloc(sizeof(int)); p[0] = 0; } main() { int q[10]; q[0]=1; f(q); printf("%d\n", q[0]); } What happens here? Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Pass-by-Value: Java Objects void f(Vector v) { v.removeAll(); } main() { Vector vec; vec.addElement(new Integer(1)); f(vec); System.out.println(vec.size()); } What happens here? Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Pass-by-Value: Java Objects void f(Vector v) { v = new Vector(); v.removeAll(); } main() { Vector vec; vec.addElement(new Integer(1)); f(vec); System.out.println(vec.size()); } What happens here? Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Pass by Reference Caller: Callee: … int f(int a){ f(i); ...a...; … } i … } i a Formal parameters become alias of actual parameters Actual parameters: changed by changes to formal parameters Examples: Fortran: the only parameter passing mechanism C++ (reference type, &) /Pascal (var) Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Example: Pass By Reference C++ syntax. Not valid in C void swap(int &a, int &b) { int temp; temp = a; a = b; b = temp; } main(){ int i=1, j=2; swap(i,j); printf(“i=%d, j=%d\n”, i, j); i 1 j 2 a b i 1 j 2 a b i 2 j 1 a b Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Pass-by-Reference: How to minic it in C? void f(int *p) { *p = 0; } main() { int q; q = 1; f(&q); printf(“%d\n”, q); } It is really pass-by-value. Why? Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

It is really pass-by-value C: void f(int *p) { p = (int *) malloc(sizeof(int)); *p = 0; } main() { int q; q = 1; f(&q); printf(“%d\n”, q); } Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Pass-by-Reference: C++ Constant Reference void f(const int & p) { int a = p; p = 0; } main(){ int q; q = 1; f(q); printf("%d\n", q); What happens here? Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Pass-by-Reference: C++ Reference-to-Pointer void f(int * &p) { *p = 0; } main(){ int *q; int a[10]; a[0]=1; q=a; f(q); printf("%d, %d\n", q[0], a[0]); } What happens here? Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Pass-by-Reference: C++ Reference-to-Pointer void f(int * &p) { p = new int; *p = 0; } main(){ int *q; int a[10]; a[0]=1; q=a; f(q); printf("%d, %d\n", q[0], a[0]); } What happens here? Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Pass-by-Reference: C++ Reference-to-Array void f(int (&p)[10]) { p[0]=0; } main(){ int *q; int a[10]; a[0]=1; q = a; f(a); printf("%d, %d\n", q[0], a[0]); What happens here? Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Pass by Value-Result Caller: Callee: … int f(int a){ f(i); ...a...; … } i a i a Combination of Pass-by-Value and Pass-by-Reference (Pass-by-Reference without aliasing) Replace formal parameters by the values of actual parameters Value of formal parameters are copied back to actual parameters Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Example: Pass By Value-Result void swap(int a, int b) { int temp; temp = a; a = b; b = temp; } main(){ int i=1, j=2; swap(i,j); printf(“i=%d, j=%d\n”, i, j); i 1 j 2 a b i 1 j 2 a b i 2 j 1 a b Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Unspecified Issues ? void f(int a, int b) { a = 1; b = 2; } main(){ int i=0; f(i,i); printf(“i=%d\n”, i); i a b i a b 1 ? 2 Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Pass by Name Caller: Callee: … int f(int a){ f(i); ...a...; … } … } Actual parameters only evaluated when they are needed The same parameter can be evaluated multiple times Evaluated in calling environment Essentially equivalent to normal order evaluation Example: Algol 60 Not adopted by any major languages due to implementation difficulty Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Example: Pass By Name a (i) 1 j 2 temp a (i) 1 b (j) 2 temp a (i) 2 void swap(int a, int b) { int temp; temp = a; a = b; b = temp; } main(){ int i=1, j=2; swap(i,j); printf(“i=%d, j=%d\n”, i, j); a (i) 1 j 2 temp a (i) 1 b (j) 2 temp a (i) 2 b (j) temp 1 Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Pass-by-Name: Side Effects int p[3]={1,2,3}; int i; void swap(int a, int b) { int temp; temp = a; a = b; b = temp; } main(){ i = 1; swap(i, a[i]); printf(“%d, %d\n”, i, a[i]); What happens here? Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Some Variants Pass by Name Evaluated at every use, in the calling environment Pass by Need Evaluated once, memorized for future use Pass by Text (Macro) Evaluated using the called environment. All belong to Non-strict evaluation (lazy evaluation) Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008

Comparisons Call by Value Efficient. No additional level of indirection. Less flexible and less efficient without pointer. (array, struct, union as parameters) Call by Reference Require one additional level of indirection (explicit dereferencing) If a parameter is not variable (e.g., constant), a memory space must be allocated for it, in order to get a reference. Easiest to implement. Call by Value-Result You may not want to change actual parameter values when facing exceptions. Call by Name Lazy evaluation Difficult to implement Lecture 10 – Control II, Spring 2008 CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008