Class 15: Implementing Scope in Function Calls

Class 15: Implementing Scope in Function Calls

Class 15: Implementing Scope in Function Calls SI 413 - Programming Languages and Implementation Dr. Daniel S. Roche United States Naval Academy Fall 2011 Roche (USNA) SI413 - Class 15 Fall 2011 1 / 10 Implementing Dynamic Scope For dynamic scope, we need a stack of bindings for every name. These are stored in a Central Reference Table. This primarily consists of a mapping from a name to a stack of values. The Central Reference Table may also contain a stack of sets, each containing identifiers that are in the current scope. This tells us which values to pop when we come to an end-of-scope. Roche (USNA) SI413 - Class 15 Fall 2011 2 / 10 Example: Central Reference Tables with Lambdas { new x := 0; new i := -1; new g := lambda z{ ret :=i;}; new f := lambda p{ new i :=x; i f (i>0){ ret :=p(0); } e l s e { x :=x + 1; i := 3; ret :=f(g); } }; w r i t e f( lambda y{ret := 0}); } What gets printed by this (dynamically-scoped) SPL program? Roche (USNA) SI413 - Class 15 Fall 2011 3 / 10 (dynamic scope, shallow binding) (dynamic scope, deep binding) (lexical scope) Example: Central Reference Tables with Lambdas The i in new g := lambda z{ w r i t e i;}; from the previous program could be: The i in scope when the function is actually called. The i in scope when g is passed as p to f The i in scope when g is defined Roche (USNA) SI413 - Class 15 Fall 2011 4 / 10 Example: Central Reference Tables with Lambdas The i in new g := lambda z{ w r i t e i;}; from the previous program could be: The i in scope when the function is actually called. (dynamic scope, shallow binding) The i in scope when g is passed as p to f (dynamic scope, deep binding) The i in scope when g is defined (lexical scope) Roche (USNA) SI413 - Class 15 Fall 2011 4 / 10 Reminder: The class of functions Recall that functions in a programming language can be: Third class: Never treated like variables Second class: Passed as parameters to other functions First class: Also returned from a function and assigned to a variable. With lexical scoping, rules for binding get more complicated when functions have more flexibility. Roche (USNA) SI413 - Class 15 Fall 2011 5 / 10 Non-local references. Many older languages (C/C++, Fortran) avoid this by treating functions as third-class and prohibiting nested functions. Then every name has local scope (to a function or block), or global scope. The result is compile-time name resolution | fast code! Implementing Lexical Scope What's tough about lexical scope? Roche (USNA) SI413 - Class 15 Fall 2011 6 / 10 Implementing Lexical Scope What's tough about lexical scope? Non-local references. Many older languages (C/C++, Fortran) avoid this by treating functions as third-class and prohibiting nested functions. Then every name has local scope (to a function or block), or global scope. The result is compile-time name resolution | fast code! Roche (USNA) SI413 - Class 15 Fall 2011 6 / 10 We can use static links to find bindings in the most recent enclosing function call. Lexical Scope with Nested Functions What if we allow just things like this: v o i d f( i n t x){ v o i d g( i n t y){ print(x+y); } i f (x < 5)g(10); e l s e f(x-1); } i n t main(){f(6); } Roche (USNA) SI413 - Class 15 Fall 2011 7 / 10 Lexical Scope with Nested Functions What if we allow just things like this: v o i d f( i n t x){ v o i d g( i n t y){ print(x+y); } i f (x < 5)g(10); e l s e f(x-1); } i n t main(){f(6); } We can use static links to find bindings in the most recent enclosing function call. Roche (USNA) SI413 - Class 15 Fall 2011 7 / 10 Bindings may be further down than most recent call. We need dynamic links into the stack! Lexical Scope with 2nd-Class Functions What if functions have full 2nd-class privileges? ( d e f i n e (fag) ( d e f i n e (hb)( d i s p l a y (+ab))) ( i f (<a 5) (f(ga)h) (ga))) (f4 add1) Roche (USNA) SI413 - Class 15 Fall 2011 8 / 10 Lexical Scope with 2nd-Class Functions What if functions have full 2nd-class privileges? ( d e f i n e (fag) ( d e f i n e (hb)( d i s p l a y (+ab))) ( i f (<a 5) (f(ga)h) (ga))) (f4 add1) Bindings may be further down than most recent call. We need dynamic links into the stack! Roche (USNA) SI413 - Class 15 Fall 2011 8 / 10 There are some very non-local references here! Where should we store local variables? Lexical Scope with 1st-Class Functions What happens here? { new f := lambda x{ new g := lambda y{ ret :=x*y;}; ret :=g; }; new h :=f(2); w r i t e h(3); } Roche (USNA) SI413 - Class 15 Fall 2011 9 / 10 Lexical Scope with 1st-Class Functions What happens here? { new f := lambda x{ new g := lambda y{ ret :=x*y;}; ret :=g; }; new h :=f(2); w r i t e h(3); } There are some very non-local references here! Where should we store local variables? Roche (USNA) SI413 - Class 15 Fall 2011 9 / 10 Class outcomes You should know: What is meant by shallow/deep binding (roughly) Why some language restrict functions to 3rd-class or 2nd-class What static links are, and when they can and can't be used What non-local references are, and what kind of headaches they create You should be able to: Draw the state of the Central Reference Table at any point in running a dynamically-scoped program Trace the run of a lexically-scoped program. Roche (USNA) SI413 - Class 15 Fall 2011 10 / 10.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    15 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us