Implementing Subprograms

Similar documents
Chapter 10. Implementing Subprograms ISBN

Programming Languages: Lecture 12

Chapter 10. Implementing Subprograms

Chapter 9. Def: The subprogram call and return operations of a language are together called its subprogram linkage

Implementing Subprograms

Chapter 10 Implementing Subprograms

12/4/18. Outline. Implementing Subprograms. Semantics of a subroutine call. Storage of Information. Semantics of a subroutine return

Subprograms. Copyright 2015 Pearson. All rights reserved. 1-1

! Those values must be stored somewhere! Therefore, variables must somehow be bound. ! How?

Implementing Subroutines. Outline [1]

Lecture 11: Subprograms & their implementation. Subprograms. Parameters

An Activation Record for Simple Subprograms. Activation Record for a Language with Stack-Dynamic Local Variables

Subprograms. Bilkent University. CS315 Programming Languages Pinar Duygulu

G Programming Languages - Fall 2012

Chapter 8 ( ) Control Abstraction. Subprograms Issues related to subprograms How is control transferred to & from the subprogram?

Chapter 8. Fundamental Characteristics of Subprograms. 1. A subprogram has a single entry point

9. Subprograms. 9.2 Fundamentals of Subprograms

CS 314 Principles of Programming Languages

Today's Topics. CISC 458 Winter J.R. Cordy

Example. program sort; var a : array[0..10] of integer; procedure readarray; : function partition (y, z :integer) :integer; var i, j,x, v :integer; :

Special Topics: Programming Languages

Programming Languages: Lecture 11

Run-Time Environments

Run-time Environments - 2

System Software Assignment 1 Runtime Support for Procedures

Principles of Programming Languages Topic: Scope and Memory Professor Louis Steinberg Fall 2004

Chapter 5 Names, Binding, Type Checking and Scopes

Run-Time Data Structures

Run Time Environment. Procedure Abstraction. The Procedure as a Control Abstraction. The Procedure as a Control Abstraction

CMSC 4023 Chapter 9. Fundamentals of Subprograms Introduction

Implementing Subprograms

Chapter 9 Subprograms

Separate compilation. Topic 6: Runtime Environments p.1/21. CS 526 Topic 6: Runtime Environments The linkage convention

Memory Management and Run-Time Systems

Run-Time Environments

Concepts Introduced in Chapter 7

G Programming Languages Spring 2010 Lecture 4. Robert Grimm, New York University

Chapter 5. Names, Bindings, and Scopes

Answer: Early binding generally leads to greater efficiency (compilation approach) Late binding general leads to greater flexibility

CSE 504. Expression evaluation. Expression Evaluation, Runtime Environments. One possible semantics: Problem:

Procedure and Function Calls, Part II. Comp 412 COMP 412 FALL Chapter 6 in EaC2e. target code. source code Front End Optimizer Back End

Programming Languages

Scope. CSC 4181 Compiler Construction. Static Scope. Static Scope Rules. Closest Nested Scope Rule

Run Time Environment. Activation Records Procedure Linkage Name Translation and Variable Access

Chapter 9 Subprograms

G Programming Languages - Fall 2012

Chapter 9. Subprograms

CS 4100 Block Structured Languages. Fixed vs Variable. Activation Record. Activation Records. State of an Activation

CIT Week13 Lecture

CS 345. Functions. Vitaly Shmatikov. slide 1

Programming Languages Semantics

References and pointers

Principles of Programming Languages

UNIT 3

Programmiersprachen (Programming Languages)

Imperative Programming

Informatica 3 Syntax and Semantics

Chapter 5 Names, Bindings, Type Checking, and Scopes

CS 314 Principles of Programming Languages. Lecture 13

COP4020 Fall 2006 Final Exam

Runtime Environments I. Basilio B. Fraguela

Chapter 9. Subprograms

Typical Runtime Layout. Tiger Runtime Environments. Example: Nested Functions. Activation Trees. code. Memory Layout

Run Time Environments

Module 27 Switch-case statements and Run-time storage management

UNIT V Sub u P b ro r g o r g a r m a s

Attributes of Variable. Lecture 13: Run-Time Storage Management. Lifetime. Value & Location

Names, Scopes, and Bindings. CSE 307 Principles of Programming Languages Stony Brook University

Organization of Programming Languages CS 3200/5200N. Lecture 09

CS415 Compilers. Procedure Abstractions. These slides are based on slides copyrighted by Keith Cooper, Ken Kennedy & Linda Torczon at Rice University

Names, Scopes, and Bindings. CSE 307 Principles of Programming Languages Stony Brook University

Programming Languages & Paradigms PROP HT Course Council. Subprograms. Meeting on friday! Subprograms, abstractions, encapsulation, ADT

CSC 2400: Computer Systems. Using the Stack for Function Calls

FORM 2 (Please put your name and form # on the scantron!!!!)

6. Names, Scopes, and Bindings

Design Issues. Subroutines and Control Abstraction. Subroutines and Control Abstraction. CSC 4101: Programming Languages 1. Textbook, Chapter 8

Compiler Construction

Names, Bindings, Scopes

Compiler Construction

CSE 3302 Notes 5: Memory Management

Programming Languages Third Edition. Chapter 10 Control II Procedures and Environments

Chapter 3:: Names, Scopes, and Bindings

Presidency University, Bengaluru. Programming Language Design

Functions and Procedures

Compilers and Code Optimization EDOARDO FUSELLA

Symbol Tables. ASU Textbook Chapter 7.6, 6.5 and 6.3. Tsan-sheng Hsu.

Procedure and Object- Oriented Abstraction

CSc 520 Principles of Programming Languages

Informatica 3 Marcello Restelli

CSc 520 Principles of Programming Languages. ameter Passing Reference Parameter. Call-by-Value Parameters. 28 : Control Structures Parameters

CS 330 Lecture 18. Symbol table. C scope rules. Declarations. Chapter 5 Louden Outline

Object Oriented Paradigm Languages

THEORY OF COMPILATION

CA Compiler Construction

known as non-void functions/methods in C/C++/Java called from within an expression.

Type Bindings. Static Type Binding

Programming Languages

NOTE: Answer ANY FOUR of the following 6 sections:

Chap. 8 :: Subroutines and Control Abstraction

Type Checking Binary Operators

Transcription:

1 Implementing Subprograms CS 315 Programming Languages Pinar Duygulu Bilkent University CS315 Programming Languages Pinar Duygulu

The General Semantics of Calls and Returns 2 The subprogram call and return operations of a language are together called its subprogram linkage A subprogram call has numerous actions associated with it Parameter passing methods Static local variables Execution status of calling program Transfer of control Subprogram nesting

Implementing Simple Subprograms: 3 Subprograms cannot be nested All local variables are static e.g. Subprograms in early versions of Fortran

4 Implementing Simple Subprograms: Call Semantics Save the execution status of the caller Carry out the parameter-passing process Pass the return address to the callee Transfer control to the callee

5 mplementing Simple Subprograms: Return Semantics If pass-by-value-result parameters are used, move the current values of those parameters to their corresponding actual parameters If it is a function, move the functional value to a place the caller can get it Restore the execution status of the caller Transfer control back to the caller

Storage required for call/return actions 6 Status information about the caller Parameters Return address Functional value for function subprograms These along with local variables and the subprogram code, form the complete collection of information a subprogram needs to execute and then return to the caller

Implementing Simple Subprograms: Parts 7 Two separate parts: the actual code and the noncode part (local variables and data that can change) The format, or layout, of the noncode part of an executing subprogram is called an activation record An activation record instance (ARI) is a concrete example of an activation record (the collection of data for a particular subprogram activation)

An Activation Record for Simple Subprograms 8 Because languages with simple subprograms do not support recursion, there can be only one active version of a given subprogram at a time Therefore, there can be only a single instance of the activation record for a subprogram Since activation record instance of a simple subprogram has fixed size it can be statically allocated It could be also attached to the code part Note: In the rest of the slides the saved execution status of the caller will be omitted

9 Code and Activation Records of a Program with Simple Subprograms Note that code could be attached to ARIs Also, the four program units could be compiled at different times Linker put the compiled parts together when it is called for the main program

Implementing Subprograms with Stack-Dynamic Local Variables 10 More complex activation record The compiler must generate code to cause implicit allocation and de-allocation of local variables Recursion must be supported (adds the possibility of multiple simultaneous activations of a subprogram)

Typical Activation Record for a Language with Stack-Dynamic Local Variables 11 Return address: pointer to the code segment of the caller and an offset address in that code segment of the instruction following the call Dynamic link: pointer to the top of the activation record instance of the caller In static scoped languages this link is used in destruction The stack top set to the value of old dynamic link

Implementing Subprograms with Stack-Dynamic Local Variables: Activation Record 12 The activation record format is static, but its size may be dynamic An activation record instance is dynamically created when a subprogram is called Run-time stack

An Example: C Function 13 void sub(float total, int part) { int list[4]; float sum; } [4] [3] [2] [1] [0]

An Example Without Recursion 14 void A(int x) { int y;... C(y);... } void B(float r) { int s, t;... A(s);... } void C(int q) {... } void main() { float p;... B(p);... } main calls B B calls A A calls C

An Example Without Recursion 15

Dynamic Chain and Local Offset 16 The collection of dynamic links in the stack at a given time is called the dynamic chain, or call chain Local variables can be accessed by their offset from the beginning of the activation record. This offset is called the local_offset The local_offset of a local variable can be determined by the compiler at compile time The first local variable declared in a subprogram would be allocated in the activation record two positions (return address and dynamic link) plus the number of parameters from the bottom Local offset for y in fun1 is 3 s in fun2 is 3 t in fun2 is 4

An Example With Recursion 17 The activation record used in the previous example supports recursion, e.g. int factorial (int n) { <-----------------------------1 if (n <= 1) return 1; else return (n * factorial(n - 1)); <-----------------------------2 } void main() { int value; value = factorial(3); <-----------------------------3 }

Activation Record for factorial 18

Nested Subprograms 19 Some non-c-based static-scoped languages (e.g., Fortran 95, Ada, JavaScript) use stack-dynamic local variables and allow subprograms to be nested All variables that can be non-locally accessed reside in some activation record instance in the stack The process of locating a non-local reference: 1. Find the correct activation record instance 2. Determine the correct offset within that activation record instance

Locating a Non-local Reference 20 Finding the offset is easy Finding the correct activation record instance Static semantic rules guarantee that all non-local variables that can be referenced have been allocated in some activation record instance that is on the stack when the reference is made (a subprogram is callable only when all of its static ancestors are active)

Static Scoping 21 A static chain is a chain of static links that connects certain activation record instances The static link in an activation record instance for subprogram A points to one of the activation record instances of A's static parent The static chain from an activation record instance connects it to all of its static ancestors

Example Pascal Program 22 program MAIN_2; var X : integer; procedure BIGSUB; var A, B, C : integer; procedure SUB1; var A, D : integer; begin { SUB1 } A := B + C; <-----------------------1 end; { SUB1 } procedure SUB2(X : integer); var B, E : integer; procedure SUB3; var C, E : integer; begin { SUB3 } SUB1; E := B + A: <--------------------2 end; { SUB3 } begin { SUB2 } SUB3; A := D + E; <-----------------------3 end; { SUB2 } begin { BIGSUB } SUB2(7); end; { BIGSUB } begin BIGSUB; end; { MAIN_2 }

Example Pascal Program (continued) 23 Call sequence for MAIN_2 MAIN_2 calls BIGSUB BIGSUB calls SUB2 SUB2 calls SUB3 SUB3 calls SUB1

Stack Contents at Position 1 24

Displays 25 An alternative to static chains Static links are stored in a single array called a display The contents of the display at any given time is a list of addresses of the accessible activation record instances

Blocks 26 Blocks are user-specified local scopes for variables An example in C {int temp; temp = list [upper]; list [upper] = list [lower]; list [lower] = temp } The lifetime of temp in the above example begins when control enters the block An advantage of using a local variable like temp is that it cannot interfere with any other variable with the same name

Implementing Blocks 27 Two Methods: 1. Treat blocks as parameter-less subprograms that are always called from the same location Every block has an activation record; an instance is created every time the block is executed 2. Since the maximum storage required for a block can be statically determined, this amount of space can be allocated after the local variables in the activation record

Implementing Dynamic Scoping 28 Deep Access: non-local references are found by searching the activation record instances on the dynamic chain Shallow Access: put locals in a central place One stack for each variable name Central table with an entry for each variable name

29 Using Shallow Access to Implement Dynamic Scoping

Summary 30 Subprogram linkage semantics requires many action by the implementation Simple subprograms have relatively basic actions Stack-dynamic languages are more complex Subprograms with stack-dynamic local variables and nested subprograms have two components actual code activation record

Summary (continued) 31 Activation record instances contain formal parameters and local variables among other things Static chains are the primary method of implementing accesses to non-local variables in static-scoped languages with nested subprograms Access to non-local variables in dynamic-scoped languages can be implemented by use of the dynamic chain or thru some central variable table method