Catriel Beeri Pls/Winter 2004/5 environment 19 II. Frames and frame structures Frame – set of bindings generated together in a binding generation event.

Slides:



Advertisements
Similar presentations
Semantics Static semantics Dynamic semantics attribute grammars
Advertisements

School of EECS, Peking University “Advanced Compiler Techniques” (Fall 2011) SSA Guo, Yao.
CSI 3120, Implementing subprograms, page 1 Implementing subprograms The environment in block-structured languages The structure of the activation stack.
Variables, Environments and Closures. Overview We will Touch on the notions of variable extent and scope Introduce the notions of lexical scope and.
Chapter 9 Subprograms Specification: name, signature, actions Signature: number and types of input arguments, number and types of output results –Book.
Catriel Beeri Pls/Winter 2004/5 last 55 Two comments on let polymorphism I. What is the (time, space) complexity of type reconstruction? In practice –
(1) ICS 313: Programming Language Theory Chapter 10: Implementing Subprograms.
CS 326 Programming Languages, Concepts and Implementation Instructor: Mircea Nicolescu Lecture 18.
Catriel Beeri Pls/Winter 2004/5 functional-language 1 Substitution Semantics of FL – a simple functional language FL is EL + (non-recursive) function creation.
Chapter 9 Subprogram Control Consider program as a tree- –Each parent calls (transfers control to) child –Parent resumes when child completes –Copy rule.
CSE115: Introduction to Computer Science I Dr. Carl Alphonce 219 Bell Hall
Introduction to Computability Theory
6.001 SICP SICP – October environment Trevor Darrell 32-D512 Office Hour: W web page:
Honors Compilers Addressing of Local Variables Mar 19 th, 2002.
Catriel Beeri Pls/Winter 2004/5 type reconstruction 1 Type Reconstruction & Parametric Polymorphism  Introduction  Unification and type reconstruction.
1 Pertemuan 20 Run-Time Environment Matakuliah: T0174 / Teknik Kompilasi Tahun: 2005 Versi: 1/6.
Stacks. 2 What is a stack? A stack is a Last In, First Out (LIFO) data structure Anything added to the stack goes on the “top” of the stack Anything removed.
Run time vs. Compile time
Catriel Beeri Pls/Winter 2004/5 environment 68  Some details of implementation As part of / extension of type-checking: Each declaration d(x) associated.
Catriel Beeri Pls/Winter 2004/05 types 65  A type-checking algorithm The task: (since we start with empty H, why is the goal not just E?) The rule set.
Stacks (Revised and expanded from CIT 591). What is a stack? A stack is a Last In, First Out (LIFO) data structure Anything added to the stack goes on.
The environment of the computation Declarations introduce names that denote entities. At execution-time, entities are bound to values or to locations:
Stacks. 2 What is a stack? A stack is a Last In, First Out (LIFO) data structure Anything added to the stack goes on the “top” of the stack Anything removed.
Stacks. What is a stack? A stack is a Last In, First Out (LIFO) data structure Anything added to the stack goes on the “top” of the stack Anything removed.
Catriel Beeri Pls/Winter 2004/5 environment1 1 The Environment Model  Introduction and overview  A look at the execution model  Dynamic scoping  Static.
Functional programming: LISP Originally developed for symbolic computing First interactive, interpreted language Dynamic typing: values have types, variables.
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.
Introduction Even though the syntax of Scheme is simple, it can be very difficult to determine the semantics of an expression. Hacker’s approach: Run it.
CSC321: Programming Languages1 Programming Languages Tucker and Noonan Chapter 9: Functions 9.1 Basic Terminology 9.2 Function Call and Return 9.3 Parameters.
Symbol Table (  ) Contents Map identifiers to the symbol with relevant information about the identifier All information is derived from syntax tree -
Chapter TwelveModern Programming Languages1 Memory Locations For Variables.
Chapter 7: Runtime Environment –Run time memory organization. We need to use memory to store: –code –static data (global variables) –dynamic data objects.
1 Stacks Chapter 4 2 Introduction Consider a program to model a switching yard –Has main line and siding –Cars may be shunted, removed at any time.
CS3012: Formal Languages and Compilers The Runtime Environment After the analysis phases are complete, the compiler must generate executable code. The.
COMPILERS Semantic Analysis hussein suleman uct csc3005h 2006.
Compiler Construction
Chapter 7 Runtime Environments. Relationships between names and data objects As execution proceeds, the same name can denote different data objects Procedures,
CNIT 133 Interactive Web Pags – JavaScript and AJAX Advanced topic - variable.
Computer Science Department Data Structure & Algorithms Lecture 8 Recursion.
Basic Semantics Associating meaning with language entities.
Interpretation Environments and Evaluation. CS 354 Spring Translation Stages Lexical analysis (scanning) Parsing –Recognizing –Building parse tree.
Programming Languages by Ravi Sethi Chapter 6: Groupings of Data and Operations.
CS 153: Concepts of Compiler Design October 5 Class Meeting Department of Computer Science San Jose State University Fall 2015 Instructor: Ron Mak
Dr. Philip Cannata 1 Functions and Recursion. Dr. Philip Cannata 2 10 Java (Object Oriented) ASP RDF (Horn Clause Deduction, Semantic Web) Relation Jython.
MT311 Java Application Development and Programming Languages Li Tak Sing( 李德成 )
Implementing Subprograms What actions must take place when subprograms are called and when they terminate? –calling a subprogram has several associated.
RUN-Time Organization Compiler phase— Before writing a code generator, we must decide how to marshal the resources of the target machine (instructions,
CS536 Semantic Analysis Introduction with Emphasis on Name Analysis 1.
Copyright © 2006 The McGraw-Hill Companies, Inc. Basic Terminology Value-returning functions: –known as “non-void functions/methods” in C/C++/Java –called.
Variables, Environments and Closures. Overview Touch on the notions of variable extent and scope Introduce the notions of lexical scope and dynamic.
Fall 2008Programming Development Techniques 1 Topic 17 Assignment, Local State, and the Environment Model of Evaluation Section 3.1 & 3.2.
RUNTIME ENVIRONMENT AND VARIABLE BINDINGS How to manage local variables.
Operational Semantics Mooly Sagiv Tel Aviv University Sunday Scrieber 8 Monday Schrieber.
Procedure Definitions and Semantics Procedures support control abstraction in programming languages. In most programming languages, a procedure is defined.
Operational Semantics Mooly Sagiv Reference: Semantics with Applications Chapter 2 H. Nielson and F. Nielson
CSE 332: C++ Exceptions Motivation for C++ Exceptions Void Number:: operator/= (const double denom) { if (denom == 0.0) { // what to do here? } m_value.
Run-Time Environments Presented By: Seema Gupta 09MCA102.
Design issues for Object-Oriented Languages
Operational Semantics of Scheme
Run-Time Environments Chapter 7
Functions.
CS 326 Programming Languages, Concepts and Implementation
Env. Model Implementation
Stacks Chapter 4.
Variables, Environments and Closures
Implementing Subprograms
Bindings, Scope, and Extent
Stacks.
UNIT V Run Time Environments.
Recursive Procedures and Scopes
Presentation transcript:

Catriel Beeri Pls/Winter 2004/5 environment 19 II. Frames and frame structures Frame – set of bindings generated together in a binding generation event (frame ~ mini environment ) When an event generates frame F, then the new environment is (for some E) E itself was similarly generated In the future, E may become again the current environment  Frames are added/removed in LIFO A stack discipline

Catriel Beeri Pls/Winter 2004/5 environment 20 Environment structure --- past and present frames -- a tree: each path from root is a stack of frames Activation start (binding generation event) generation of frame implemented as push (onto current environment) Look-up --- search in frame stack, top-to-bottom Activation exit -- restoration of previous environment Frame disposed of (automatically/garbage collection) --- pop Let us re-visit previous example

Catriel Beeri Pls/Winter 2004/5 environment 21 Example: (start with empty environment) Activation directly evaluated frame The value 7 is returned, down to to act 0

Catriel Beeri Pls/Winter 2004/5 environment 22  Dynamic scoping Results of resolutions depend on how environments are modified when a activation is entered Option A: new generated bindings are always merged into current environment (at point of entrance) dynamic scoping Simple, elegant approach Works well with stack-based implementations of pl’s We discuss implementation, present examples, show that approach is WRONG

Catriel Beeri Pls/Winter 2004/5 environment 23

Catriel Beeri Pls/Winter 2004/5 environment 24 Activation and frame stacks are in 1-1 correspondence! Each activation A --- associated frame F(A) generated & removed together Look-up when A is current (top of activation stack) starts at F(A) (then top of frame stack) then (if needed) goes down Wlog: going down uses the dynamic parent to reach the activation below, then its frame Look-up follows the dynamic parents chain, until a binding is found (or fail announced)

Catriel Beeri Pls/Winter 2004/5 environment 25 Example revisited (let* x =3, f = ….) Act frame d-eval exp evaluated exp The result 7 is returned from #3 to #2 to #1 to #0 Q: What would happen if the body of f contained f?

Catriel Beeri Pls/Winter 2004/5 environment 26 Example: We start from g(3), after the bindings of the let* were established, showing successive (partial) stacks, (‘control’ shown with a circle) ) Here, f, y are d-evaluated

Catriel Beeri Pls/Winter 2004/5 environment 27 When returns with 4, we are back at act(g) Now, d-eval f, y+1 Finally, back in act(g), 4+5 evaluates 9, and the computation of the let* returns this value

Catriel Beeri Pls/Winter 2004/5 environment 28 Example: Evaluate See details of stack evolution next page

Catriel Beeri Pls/Winter 2004/5 environment 29 Act frame eval d-eval The final result, 10, moves down to #0

Catriel Beeri Pls/Winter 2004/5 environment 30 Example: next page

Catriel Beeri Pls/Winter 2004/5 environment 31 Act frame eval d-eval The final result is 9 Wrong!

Catriel Beeri Pls/Winter 2004/5 environment 32 The source of the problem: A delay between creation of a function value (from a function expression) its application  The bindings for its free variables available when it is applied may differ from those when it is created

Catriel Beeri Pls/Winter 2004/5 environment 33 Act frame d-eval #2 and the binding x  1 are gone! #3 is on top of #1 Free variable: x (or worse, could be defined)

Catriel Beeri Pls/Winter 2004/5 environment 34 The source of the problem: A delay between creation of a function value (from a function expression) its application  The bindings for its free variables available when it is applied may differ from those when it is created

Catriel Beeri Pls/Winter 2004/5 environment 35 What is the result? Right or wrong?

Catriel Beeri Pls/Winter 2004/5 environment 36 What happens after a call E(2)?

Catriel Beeri Pls/Winter 2004/5 environment 37 Can such phenomena also happen in C?

Catriel Beeri Pls/Winter 2004/5 environment 38 In dynamic scoping the free (global) variables in a function body are associated with bindings late: when resolution is performed The associations use the stack of frames, accessed in order of generation This allows interference!  no relationship to static structure Static structure is not a reliable predictor of execution

Catriel Beeri Pls/Winter 2004/5 environment 39 Various problems of dynamic scoping: Same calls of a function (with same arg value) may return different results (including error msgs in some) (lack of referential transparency) Change of a formal parameter of a function may cause others to change their behavior A function called by F may `see’ F’s parameters and locals– a breach of abstraction/security Useless to perform static checks such as – Static type-check –Is a variable defined before being used? (free var check) unpredictable behavior, often unrelated to static structure

Catriel Beeri Pls/Winter 2004/5 environment 40 Manifestation of problems does not require Higher-order functions Recursion (Although it is more common when these are present) Conclusion: dynamic scoping is Simple, elegant, (quite) efficient, but wrong! now considered an error, not used in modern pl’s Recall: Results of resolutions depend on how environments are modified when a activation is entered What other options are there ?

Catriel Beeri Pls/Winter 2004/5 environment 41 The problem (in dynamic) : A delay between creation of a function value and its application  The bindings for its free variables available when it is applied are different from those when it is created The solution: When a function value is created, the bindings for its free variables (from current environment) are attached to it When it is applied, these bindings are used as base environment  Static scoping

Catriel Beeri Pls/Winter 2004/5 environment 42 A function value (static scoping) : fv=, where p is the parameter(s) b is the body E is an environment with bindings for The triple is called a (function) closure Intended to be used later in various places (delayed evaluation) A closed package that contains everything needed for its future evaluation(s)

Catriel Beeri Pls/Winter 2004/5 environment 43 Closure and environment creation: When a function expression is evaluated in environment E, the value is created E’ is derived from E When a function value is applied to args in environment E’’ –a frame F of bindings pars  args is generated – the activation executes in environment –When it terminates, the environment E’’ is restored The environment component of a function value is derived from that of its time & place of creation

Catriel Beeri Pls/Winter 2004/5 environment 44 Note: environment creation upon entrance to let, let* is unchanged For letrec --- below

Catriel Beeri Pls/Winter 2004/5 environment 45 Implementation of Environment creation: (in all implementations, the term function closure is used)  Fully computed at the time of creation: The environment component of a function value is computed (when it is created) by copying the relevant bindings from the current environment: if E is current environment, That of an activation is computed (before it starts) A common choice in implementations of functional pl’s

Catriel Beeri Pls/Winter 2004/5 environment 46  Using frames linked by references: (A common approach for imperative pl’s) 1.An environment is a (linked) list of frames, viewed as a stack: An entry: a frame & a reference to the next entry [F1,&F2] [F2, &F3] ….. The first entry in the list is the top of the stack The reference in an entry is its static parent or static pointer

Catriel Beeri Pls/Winter 2004/5 environment 47 2.An activation contain a reference to the top/first entry of its environment and a dynamic parent/pointer, to the next entry on the activation stack The dynamic and static parents, from an activation and its environment, may lead to unrelated activation and environment! activations environments a8 f8 f1 f4 env(a8) = f8, f4, f1, … a1 f11

Catriel Beeri Pls/Winter 2004/5 environment 48 3.A function value:, where &F is a reference to a frame --- the top frame of the current environment at its time of creation The triple is also called a function closure (note: it may contain extra bindings!) 4. implemented as push --- create an entry, make it the new top (this reference is the static parent of F) Previous examples revisited:

Catriel Beeri Pls/Winter 2004/5 environment 49 A0 3 A4 f, x+5 A3 g, 2 A1 A2 [F0:{}; nill] A5 x+y act frame dynamic: static: Result: 10 passed down to A4, … A0

Catriel Beeri Pls/Winter 2004/5 environment 50 A1 f, 1 A2 A3 g, 3 A4 x+y A0 A2 is now gone from stack Frame lives!

Catriel Beeri Pls/Winter 2004/5 environment 51 A0 3 A4 f, x+5 A3 g, 2 A1 A2 [F0{}; nill] A5 x+y Result 10 to A4 to A3; what next?

Catriel Beeri Pls/Winter 2004/5 environment 52 Observations: Assume (A;F) are current static parent(F), dynamic parent(A) are not necessarily associated with each other When an activation dies, the frames of its associated environment may be referenced from live activations or function values  1. An activation popped from stack is gone (dead); its associated frame (often) lives on (where?) 2. Static parent may correspond to no live activation! (is that a problem?)

Catriel Beeri Pls/Winter 2004/5 environment 53 The environment structure is a tree (how do we know it is a tree, not a graph? ) –Current environment is a path from a node to the root –When an activation starts, a node is added to the tree, as a child of some existing node (& becomes top of current environment) –When an activation terminates, a different path becomes the current environment Nodes are removed from the tree only by garbage collection (when provably they are not referenced from any live entity) no explicit pop

Catriel Beeri Pls/Winter 2004/5 environment 54 Other kinds of blocks: A function value is a package, carrying its own environment, since it moves around and may be invoked in various places A regular block (let, let*, letrec) has no need of such a mechanism Upon entrance to new region, new bindings are added to current environment (static parent ~ dynamic parent!) Upon exit, previous environment is restored let and let* are simple, letrec requires re-consideration

Catriel Beeri Pls/Winter 2004/5 environment 55 Rules for let: (entered in current environment E) Evaluate defining expressions in current environment Create the frame F for the defined variables Evaluate the body (~ activation) in Upon exit, restore E reflects the scope rule of let, the fact that it is not recursive What are the rules for let*?

Catriel Beeri Pls/Winter 2004/5 environment 56 For a letrec, the defining expressions need to be evaluated in the new environment!  Assume is evaluated in environment E But, this solution does not work now!

Catriel Beeri Pls/Winter 2004/5 environment 57 The solution: Do the evaluation of the functions and the construction of the new environment in one step The requirement: After this step

Catriel Beeri Pls/Winter 2004/5 environment 58 A solution with assignable cells: (the Scheme implementation) What is the role of delayed evaluation here? Can you think of a purely functional solution?

Catriel Beeri Pls/Winter 2004/5 environment 59 Assume computation starts from activation A0, and frame [F0:{};nill] How will the activation stack and the environment structure evolve? Note: The final value true is returned from final activation #i to #i-1, … to #0. Those in middle just pass it on

Catriel Beeri Pls/Winter 2004/5 environment 60 The rules:

Catriel Beeri Pls/Winter 2004/5 environment 61 For letrec:

Catriel Beeri Pls/Winter 2004/5 environment 62 Comments: How does a computation start? A zero’th activation, with initial environment which may be empty, or not (depending on pl/implementation) The model as described can explain activations and binding management in most languages, including interactive mode in functional languages however, the global environment and define in Scheme behave differently (still based on environments)

Catriel Beeri Pls/Winter 2004/5 environment 63 Functions in a pl exist on three levels: –L1: Function expressions (static) –L2: function values (dynamic) –L3: activations of function values (dynamic) The relationships L1  L2, L2  L3 are 1-m: –Many values may be created from an expression –Many activations of a value may occur, even be live simultaneously The distinction between L1, L2 is not evident in substitution model and in dynamic scope

Catriel Beeri Pls/Winter 2004/5 environment 64 Is behavior under static scoping compatible with static structure? Denote: For a use u(x) in program: decl u (u(x)) – the declaration d(x) that statically binds it (static) For a binding b generated at run-time for a declaration d(x) : decl b (b)=d(x) (dynamic) For a use u(x) : resol(u(x)) – the binding returned by resolving it in current environment (dynamic) Claim1: decl b (resol(u(x)))= decl u (u(x))

Catriel Beeri Pls/Winter 2004/5 environment 65 Meaning of arrows: resolves to static binding generated for d(x) u(x) d(x) x  v2 x  v1 x  v3 x  v4

Catriel Beeri Pls/Winter 2004/5 environment 66 Can prove a stronger statement: If a binding x  v is generated for declaration of x for a new activation, Then for every use of x in the scope of this declaration, its resolution always returns v let f = let x = 3 in lambda y.x+y;; …. f 5 returns 8 (always) Static structure is a reliable predictor of execution

Catriel Beeri Pls/Winter 2004/5 environment 67 Static scope avoids the problems of dynamic scope: Calls of a function with same arguments behave the same – referential transparency holds Change of formal parameter of a function does not change behavior (in activations of other functions) -- no surprises function is a black box – no external function may observe values of locals Useful to perform static check: –that a use is in scope of a declaration guarantees: resolution never returns unbound variable – Static type-checking guarantees absence of run-time type errors