1 CSC 533: Organization of Programming Languages Spring 2007 Control and subprogram implementation  control structures conditionals, loops, branches,

Slides:



Advertisements
Similar presentations
Programming Languages and Paradigms
Advertisements

Chapter 9 Subprograms Specification: name, signature, actions Signature: number and types of input arguments, number and types of output results –Book.
CSCI 330: Programming Language Concepts Instructor: Pranava K. Jha
CSC 533: Organization of Programming Languages Spring 2005
Implementing Subprograms
(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.
ISBN Chapter 10 Implementing Subprograms.
1 Chapter 7: Runtime Environments. int * larger (int a, int b) { if (a > b) return &a; //wrong else return &b; //wrong } int * larger (int *a, int *b)
CS 536 Spring Run-time organization Lecture 19.
ISBN Chapter 10 Implementing Subprograms.
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.
Run time vs. Compile time
Semantics of Calls and Returns
Chapter 9: Subprogram Control
Run-time Environment and Program Organization
1 CSCI 360 Survey Of Programming Languages 9 – Implementing Subprograms Spring, 2008 Doug L Hoffman, PhD.
1 Run time vs. Compile time The compiler must generate code to handle issues that arise at run time Representation of various data types Procedure linkage.
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.
1 Contents. 2 Run-Time Storage Organization 3 Static Allocation In many early languages, notably assembly and FORTRAN, all storage allocation is static.
© 2003 G. Drew Kessler and William M. Pottenger1 Subroutines (Part 1) CSE 262, Spring 2003.
1 Chapter 5: Names, Bindings and Scopes Lionel Williams Jr. and Victoria Yan CSci 210, Advanced Software Paradigms September 26, 2010.
Chapter 7: Runtime Environment –Run time memory organization. We need to use memory to store: –code –static data (global variables) –dynamic data objects.
ISBN Chapter 10 Implementing Subprograms.
Names and Binding In procedural programming, you write instructions the manipulate the “state” of the process where the “state” is the collection of variables.
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,
Subprograms Support process abstraction and modularity –characteristics of subprograms are that they have a single entry point the calling entity is suspended.
Compiler Construction
Chapter 9 Subprograms Fundamentals of Subprograms
1 Names, Scopes and Bindings Aaron Bloomfield CS 415 Fall
Chapter 10 Implementing Subprograms. Copyright © 2012 Addison-Wesley. All rights reserved.1-2 Chapter 10 Topics The General Semantics of Calls and Returns.
CSC3315 (Spring 2008)1 CSC 3315 Subprograms Hamid Harroud School of Science and Engineering, Akhawayn University
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.
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.
Subprograms - implementation
CSC 8505 Compiler Construction Runtime Environments.
Concepts of programming languages Chapter 5 Names, Bindings, and Scopes Lec. 12 Lecturer: Dr. Emad Nabil 1-1.
How to execute Program structure Variables name, keywords, binding, scope, lifetime Data types – type system – primitives, strings, arrays, hashes – pointers/references.
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 - implementation. Calling a subprogram  transferring control to a subprogram: save conditions in calling program pass parameters allocate.
ISBN Chapter 10 Implementing Subprograms.
1 CSC 533: Programming Languages Spring 2014 Subprogram implementation  subprograms (procedures/functions/subroutines)  subprogram linkage  parameter.
Chapter 10 Chapter 10 Implementing Subprograms. Implementing Subprograms  The subprogram call and return operations are together called subprogram linkage.
ISBN Chapter 10 Implementing Subprograms.
Run-Time Environments Presented By: Seema Gupta 09MCA102.
CSC 533: Programming Languages Spring 2016
Data Types In Text: Chapter 6.
Run-Time Environments Chapter 7
Implementing Subprograms
CSC 533: Programming Languages Spring 2015
Chapter 10: Implementing Subprograms Sangho Ha
Implementing Subprograms
CSC 533: Programming Languages Spring 2015
Subprograms In Text: Chapter 9.
Activation records Programming Language Design and Implementation (4th Edition) by T. Pratt and M. Zelkowitz Prentice Hall, 2001 Section
CSC 533: Organization of Programming Languages Spring 2005
CSC 533: Programming Languages Spring 2018
CSC 533: Programming Languages Spring 2019
Activation records Programming Language Design and Implementation (4th Edition) by T. Pratt and M. Zelkowitz Prentice Hall, 2001 Section
Presentation transcript:

1 CSC 533: Organization of Programming Languages Spring 2007 Control and subprogram implementation  control structures conditionals, loops, branches, …  subprograms (procedures/functions/subroutines) subprogram linkage, parameter passing, implementation, … We will focus on Java and C++ as example languages

2 Conditionals & loops early control structures were tied closely to machine architecture e.g., FORTRAN arithmetic if: based on IBM 704 instruction IF (expression) 10, 20, code to execute if expression < 0 GO TO code to execute if expression = 0 GO TO code to execute if expression > later languages focused more on abstraction and machine independence some languages provide counter-controlled loops e.g., in Pascal: for i := 1 to 100 do begin... end;  counter-controlled loops tend to be more efficient than logic-controlled  C++ and Java don't have counter-controlled loops (for is syntactic sugar for while)

3 Branching unconditional branching (i.e., GOTO statement) is very dangerous  leads to spaghetti code, raises tricky questions w.r.t. scope and lifetime what happens when you jump out of a function/block? what happens when you jump into a function/block? what happens when you jump into the middle of a control structure? most languages that allow GOTO’s restrict their use  in C++,can’t jump into another function can jump into a block, but not past declarations void foo() {... goto label2; // illegal: skips declaration of str... label1: string str;... label2: goto label1;// legal: str’s lifetime ends before branch }

4 Branching (cont.) why provide GOTO’s at all? (Java doesn’t)  backward compatibility  some argue for its use in specific cases (e.g., jump out of deeply nested loops) C++ and Java provide statements for more controlled loop branching  break: causes termination of a loop while (true) { num = input.nextInt(); if (num < 0) break; sum += num; }  continue: causes control to pass to the loop test while (inputKey != ’Q’) { if (keyPressed()) { inputKey = GetInput(); continue; }... }

5 Procedural control any implementation method for subprograms is based on the semantics of subprogram linkage (call & return) in general, a subprogram call involves: 1.save execution status of the calling program unit 2.parameter passing 3.pass return address to subprogram 4.transfer control to subprogram possibly: allocate local variables, provide access to non-locals in general, a subprogram return involves: 1.if out-mode parameters or return value, pass back value(s) 2.deallocate parameters, local variables 3.restore non-local variable environment 4.transfer control to the calling program unit

6 Parameters in most languages, parameters are positional  Ada also provides keyword parameters: AddEntry(dbase -> cds, new_entry -> mine); advantage: don’t have to remember parameter order disadvantage: do have to remember parameter names Ada and C++ allow for default values for parameters C++ & Java allow for optional parameters (specify with …) public static double average(double... values) { double sum = 0; for (double v : values) { sum += v; } return sum / values.length; } System.out.println( average(3.2, 3.6) ); System.out.println( average(1, 2, 4, 5, 8) );  if multiple parameters, optional parameter must be rightmost WHY?

7 Parameter passing can be characterized by the direction of information flow in mode: pass by-value out mode: pass by-result inout mode: pass by-value-result, by-reference, by-name by-value (in mode)  parameter is treated as local variable, initialized to argument value advantage: safe (function manipulates a copy of the argument) disadvantage: time & space required for copying used in ALGOL 60, ALGOL 68 default method in C++, Pascal, Modula-2 only method in C (and, technically, in Java)

8 Parameter passing (cont.) by-result (out mode)  parameter is treated as local variable, no initialization  when function terminates, value of parameter is passed back to argument potential problems: ReadValues(x, x); Update(list[GLOBAL]); by-value-result (inout mode)  combination of by-value and by-result methods  treated as local variable, initialized to argument, passed back when done same potential problems as by-result used in ALGOL-W, later versions of FORTRAN

9 Parameter passing (cont.) by-reference (inout mode)  instead of passing a value, pass an access path (i.e., reference to argument) advantage: time and space efficient disadvantage: slower access to values (must dereference), alias confusion void IncrementBoth(int & x, int & y)int a = 5; {IncrementBoth(a, a); x++; y++; } requires care in implementation: arguments must be l-values (i.e., variables) used in early FORTRAN can specify in C++, Pascal, Modula-2 Java objects look like by-reference

10 Parameter passing (cont.) by-name (inout mode)  argument is textually substituted for parameter  form of the argument dictates behavior if argument is a: variable  by-reference constant  by-value array element or expression  ??? real procedure SUM(real ADDER, int INDEX, int LENGTH); begin real TEMPSUM := 0; for INDEX := 1 step 1 until LENGTH do TEMPSUM := TEMPSUM + ADDER; SUM := TEMPSUM; end; SUM(X, I, 100)  100 * X SUM(A[I], I, 100)  A[1] A[100] SUM[A[I]*A[I], I, 100)  A[1] A[100] 2  flexible but tricky – used in ALGOL 60, replaced with by-reference in ALGOL 68

11 Parameters in Ada in Ada, programmer specifies parameter mode  implementation method is determined by the compiler in  by-value out  by-result inout  by-value-result (for non-structured types)  by-value-result or by-reference (for structured types)  choice of inout method for structured types is implementation dependent DANGER: IncrementBoth(a, a) yields different results for each method!

12 Parameters in Java parameter passing is by-value, but looks like by-reference for objects  recall, Java objects are implemented as pointers to dynamic data public void messWith(ArrayList lst) { lst.add(”okay”);... lst = new ArrayList(); } ArrayList words = new ArrayList (5); messWith(words); words size = 0 capacity = 5 when pass an object, by-value makes a copy (here, copies the pointer) pointer copy provides access to data fields, can change but, can’t move the original

13 Polymorphism in C++ & Java, can have different functions/methods with the same name  overloaded functions/methods must have different parameters to distinguish public double doStuff(String str) { … } public double doStuff(int x) { … }// OK since param type is different public int doStuff(String str) { … }// not OK, since only return differs in C++, can overload operators for new classes bool Date::operator==(const Date & d1, const Date & d2) { return (d1.day == d2.day && d1.month == d2.month && d1.year == d2.year); }  overloaded operators are NOT allowed in JavaRISKS?

14 Implementing subprograms  some info about a subprogram is independent of invocation e.g., constants, instructions  can store in static code segment  some info is dependent upon the particular invocation e.g., return value, parameters, local variables (?)  must store an activation record for each invocation Activation Record  local variables may be allocated when local variables subprogram is called, or wait until parameters declarations are reached (stack-dynamic) static link dynamic link return address

15 Run-time stack when a subroutine is called, an instance of its activation record is pushed program MAIN; var a : integer; procedure P1; begin print a; end; {of P1} procedure P2; var a : integer; begin a := 0; P1; end; {of P2} begin a := 7; P2; end. {of MAIN} when accessing a non-local variable follow static links for static scoping follow dynamic links for dynamic scoping

16 Run-time stack (cont.) when a subroutine terminates, its activation record is popped (LIFO behavior) program MAIN; var a : integer; procedure P1; begin print a; end; {of P1} procedure P2; var a : integer; begin a := 0; P1; end; {of P2} begin a := 7; P2; end. {of MAIN} when the last activation record is popped, control returns to the operating system

17 Run-time stack (cont.) note: the same subroutine may be called from different points in the program program MAIN; var a : integer; procedure P1; begin print a; end; {of P1} procedure P2; var a : integer; begin a := 0; P1; end; {of P2} begin a := 7; P2; P1; end. {of MAIN}  using dynamic scoping, the same variable in a subroutine may refer to a different addresses at different times

18 In-class exercise run-time stack? output using static scoping? output using dynamic scoping? program MAIN; var a : integer; procedure P1(x : integer); procedure P3; begin print x, a; end; {of P3} begin P3; end; {of P1} procedure P2; var a : integer; begin a := 0; P1(a+1); end; {of P2} begin a := 7; P1(10); P2; end. {of MAIN}

19 Optimizing scoping naïve implementation:  if variable is not local, follow chain of static/dynamic links until found in reality, can implement static scoping more efficiently (displays)  block nesting is known at compile-time, so can determine number of links that must be traversed to reach desired variable  can also determine the offset within the activation record for that variable  can build separate data structure that provides immediate access can’t predetermine # links or offset for dynamic scoping  subroutine may be called from different points in the same program  can’t even perform type checking statically WHY NOT?

20 Wednesday: TEST 1 types of questions:  factual knowledge: TRUE/FALSE  conceptual understanding: short answer, discussion  synthesis and application: parse trees, heap trace, scoping rules, … the test will include extra points (Mistakes Happen!)  e.g., 52 or 53 points, but graded on a scale of 50 study advice:  review online lecture notes (if not mentioned in class, won't be on test)  review text  reference other sources for examples, different perspectives  look over quizzes