Programming Languages

Similar documents
Next: What s in a name? Programming Languages. Data model in functional PL. What s in a name? CSE 130 : Fall Lecture 13: What s in a Name?

Programming Languages

Today: Revisit some objects. Programming Languages. Key data structure: Dictionaries. Using Dictionaries. CSE 130 : Winter 2009

Programming Languages

x = e Python tries to avoid overwrites i Python tries to avoid overwrites next Monday Programming Assignment #7 on Prolog quarter Assignment Revisited

Programming Languages

News. Programming Languages. Recap. Recap: Environments. Functions. of functions: Closures. CSE 130 : Fall Lecture 5: Functions and Datatypes

Programming Languages

News. CSE 130: Programming Languages. Environments & Closures. Functions are first-class values. Recap: Functions as first-class values

Programming Languages

CS558 Programming Languages

Recap from last time. Programming Languages. CSE 130 : Fall Lecture 3: Data Types. Put it together: a filter function

Programming Languages

CS412/CS413. Introduction to Compilers Tim Teitelbaum. Lecture 17: Types and Type-Checking 25 Feb 08

Programming Languages

INF 102 CONCEPTS OF PROG. LANGS FUNCTIONAL COMPOSITION. Instructors: James Jones Copyright Instructors.

Recap from last Python lecture

CS558 Programming Languages

CS558 Programming Languages

CSE 130 : Fall Programming Languages. Lecture 11: Ranjit Jhala UC San Diego. programming

Programming Languages. Programming with λ-calculus. Lecture 11: Type Systems. Special Hour to discuss HW? if-then-else int

INF 212 ANALYSIS OF PROG. LANGS FUNCTION COMPOSITION. Instructors: Crista Lopes Copyright Instructors.

Programming Languages

Programming Languages

News. Programming Languages. Complex types: Lists. Recap: ML s Holy Trinity. CSE 130: Spring 2012

Semantic Analysis. Outline. The role of semantic analysis in a compiler. Scope. Types. Where we are. The Compiler so far

Recap from last Python lecture. Today: Revisit some objects. Update subsequence. What can sequences do? Update subsequence.

CS558 Programming Languages

CMSC 330: Organization of Programming Languages. OCaml Imperative Programming

CS558 Programming Languages

Quiz. Programming Languages. CSE 130 : Fall Lecture 16: Static Types for Objects. Ranjit Jhala UC San Diego

Syntax Errors; Static Semantics

Programming Languages

Programming Languages

The role of semantic analysis in a compiler

Every language has its own scoping rules. For example, what is the scope of variable j in this Java program?

CSE : Python Programming

Key components of a lang. Deconstructing OCaml. In OCaml. Units of computation. In Java/Python. In OCaml. Units of computation.

Variables and Bindings

Programming Languages

Lecture 16: Static Semantics Overview 1

CSE 130: Programming Languages. Polymorphism. Ranjit Jhala UC San Diego

Semantic Analysis. Outline. The role of semantic analysis in a compiler. Scope. Types. Where we are. The Compiler Front-End

Records. ADTs. Objects as Records. Objects as ADTs. Objects CS412/CS413. Introduction to Compilers Tim Teitelbaum. Lecture 15: Objects 25 Feb 05

Ruby: Introduction, Basics

Static Semantics. Lecture 15. (Notes by P. N. Hilfinger and R. Bodik) 2/29/08 Prof. Hilfinger, CS164 Lecture 15 1

CSCI B522 Lecture 11 Naming and Scope 8 Oct, 2009

Back to OCaml. Summary of polymorphism. Example 1. Type inference. Example 2. Example 2. Subtype. Polymorphic types allow us to reuse code.

CSC 148 Lecture 3. Dynamic Typing, Scoping, and Namespaces. Recursion

CSE 130 Programming Languages. Lecture 3: Datatypes. Ranjit Jhala UC San Diego

CSE 413 Languages & Implementation. Hal Perkins Winter 2019 Structs, Implementing Languages (credits: Dan Grossman, CSE 341)

Overview of Semantic Analysis. Lecture 9

CS558 Programming Languages

Scope. Chapter Ten Modern Programming Languages 1

Topics Covered Thus Far. CMSC 330: Organization of Programming Languages. Language Features Covered Thus Far. Programming Languages Revisited

CMSC 330: Organization of Programming Languages. OCaml Imperative Programming

Object-Oriented Design Lecture 14 CSU 370 Fall 2007 (Pucella) Friday, Nov 2, 2007

CMSC 330: Organization of Programming Languages

Functions, Scope & Arguments. HORT Lecture 12 Instructor: Kranthi Varala

Python. Jae-Gil Lee Based on the slides by K. Naik, M. Raju, and S. Bhatkar. December 28, Outline

CSE 307: Principles of Programming Languages

Monday Feb 16, 5pm. solve these equalities. Midterm Thursday Feb 12. covers only ocaml part of the course, assignments 1 through 3.

CS1622. Semantic Analysis. The Compiler So Far. Lecture 15 Semantic Analysis. How to build symbol tables How to use them to find

Recap: Functions as first-class values

Object-oriented programming. and data-structures CS/ENGRD 2110 SUMMER 2018

Mutable Data Types. Prof. Clarkson Fall A New Despair Mutability Strikes Back Return of Imperative Programming

Announcements for this Lecture

Recap. Recap. If-then-else expressions. If-then-else expressions. If-then-else expressions. If-then-else expressions

Recap: ML s Holy Trinity. Story So Far... CSE 130 Programming Languages. Datatypes. A function is a value! Next: functions, but remember.

Programming Languages Lecture 14: Sum, Product, Recursive Types

CSE 130 Programming Languages. Datatypes. Ranjit Jhala UC San Diego

Topics Covered Thus Far CMSC 330: Organization of Programming Languages

UNIVERSITY OF CALIFORNIA Department of Electrical Engineering and Computer Sciences Computer Science Division DO NOT. P. N.

Programming Languages

CS558 Programming Languages. Winter 2013 Lecture 3

Informal Semantics of Data. semantic specification names (identifiers) attributes binding declarations scope rules visibility

CS61A Notes Week 13: Interpreters

Python debugging and beautification

Programming Languages Lecture 15: Recursive Types & Subtyping

Lecture 02, Fall 2018 Friday September 7

PIC 16, Fall Variables, Dynamically-typed, Mutable, Immutable, Functions. Michael Andrews. October 1, Department of Mathematics UCLA

Chapter 5. Names, Bindings, and Scopes

DECOMPOSITION, ABSTRACTION, FUNCTIONS

Try and Error. Python debugging and beautification

Functions CHAPTER 5. FIGURE 1. Concrete syntax for the P 2 subset of Python. (In addition to that of P 1.)

CSE 130, Fall 2005: Final Examination

Programming Languages

The Compiler So Far. Lexical analysis Detects inputs with illegal tokens. Overview of Semantic Analysis

CSE 374 Programming Concepts & Tools. Hal Perkins Spring 2010

CSE 130: Spring 2012

G Programming Languages - Fall 2012

LECTURE 14. Names, Scopes, and Bindings: Scopes

Code Generation II. Code generation for OO languages. Object layout Dynamic dispatch. Parameter-passing mechanisms Allocating temporaries in the AR

Programmiersprachen (Programming Languages)

The Dynamic Typing Interlude

CSE341: Programming Languages Lecture 9 Function-Closure Idioms. Dan Grossman Winter 2013

Begin at the beginning

Programming Languages and Techniques (CIS120)

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

Compiler Construction Lent Term 2015 Lectures 10, 11 (of 16)

Transcription:

CSE 130 : Fall 2009 Programming Languages Lecture 13: Whats in a name? Ranjit Jhala UC San Diego f = open( foo.txt, read ) f.readlines() for l in f.readlines(): <BOD> f.close ou now know enough to do PA5 Python Tutorial: How to open files, read lines Use the help command Document every function: What does it do? Recap: Python Tutorial Base Types Sequence Types Loops Functions List comprehensions map, filter, reduce enough to do PA 5 Next: What s in a name? More precisely: How should programmer think of data What does a variable x really mean?

What s in a name? ML (or Functional Languages) Namerefers to a Value Binding maps Names to Values Environment list of bindings Environment can be extended d Environment can t be changed Data model in functional PL Vars = names in phonebook Evaluation = Most recent Environment frozen in function value behavior of function cannot be changed easier reasoning Data model in OO langs Variables point to objects Objects = boxes with data inside pumpkin 3.142 Namespaces Manage variable names in Python Similar to, but different from Environments Core PL concept, unifies many ideas We will see very important differences Z [1,2,3]

Ok, but what IS a namespace? A mapping from names to objects Namespaces vs. Environments Both are maps from variables to something pumpkin Namespace Environment 3.142 Z [1,2,3] What s the difference? 1. Assignment 2. Updates/Mutation t ti 1. Assignment Basic operation in Imperative PL: x = e Simple example i,s = 0,0 while (i <= 3): i,s = i+1, s+i 1. Compute object corresponding to e 2. Change the name x to refer to object Same name s - points to different objects -namespace is not extended

1. Assignment Basic operation in Imperative PL: x = e 1. Compute object corresponding to e 2. Change the name x to refer to object Assignment: changes box that name refers to 2. Update/Mutation Change what s inside the box (object) - Not with immutable objects -eg. integers -But with mutable objects - eg. arrays, lists, dictionaries x = [100,200] x [100, 200] x[0] = "gobble gobble" x ['gobble gobble', 200] x How is it different from build a new box with updated value inside? Aliasing Two or more names refer to same object Peter Parker Aliasing Two or more names refer to same object >> x = [100,200] >> y = x [100,200] Spider Man

Aliasing and Update Two or more names refer to same object >> x = [100,200] >> y = x >> y[0] = gobble gobble" >> x [ gobble gobble [100,200],200] Aliasing Two or more names refer to same object >> x = [100,200] >> y = x >> y[0] = gobble gobble" >> x [ gobble gobble,200] If multiple names refer to same object, update affects values of all names [ gobble gobble [100,200],200] Aliasing Does not happen in Ocaml/Functional PLs actually it does happen (where?) but not exposed to the (130) programmer Aliasing Good because? Does happen in every imperative PL Java, Python: names point to objects C: names point to memory cells Bad because?

Namespaces everywhere Namespace = map from names to objects Notion of namespace pervades Python Creating Namespaces a.py x = 22 y = this sentence is false 22 a this Can create namespace, Can name a namespace, Can peep inside a namespace (see whats bound) Go to code! bpy b.py x = pumpkin y = 3.142 import a a.x 22 pumpkin 3.142 b Namespaces Namespaces 3.142 this a b 22 pumpkins For two namespaces a, b: names inside unrelated names in different spaces a.x : 22 a attribute/name x in space a b.x : 3.142 attribute/name x in space a this pumpkin b Different names can point to same object! Different names can point to same object!

Creating Namespaces: Fun Calls x = 10 10 def f(y): y = y + x return y f(x) Call-by-Value: f <fun> y 20 New local namespace for call y bound to same object (value) as arg x f(x) globals x binding unchanged by call In this case, after call, local namespace disappears Creating Namespaces: Fun Calls x = 10 10 def f(y): y = y + x return y f(x) Questions: f <fun> y 20 f(x) globals Why new local namespace (not just stack)? What s the deal with x not declared/bound in f? When do we need to freeze a namespace? Creating Namespaces: Fun Calls 2 y = 0 len <fun> x = [10] def f(y): z = len(x)+y return z y 0 x 20 f <fun> f(5) y 5 Static Scoping Lookup at runtime Not compile time Missing z added z 6 f(5) globals builtins Creating Namespaces: Fun Calls 3 def g(y): return y + n NameError: global name 'n' is not defined What happened? Looks for n at run-time,when g is called Can t find n in local, global, builtins Throws run-time error

Creating Namespaces: Fun Calls 3 def g(y): return y + n NameError n = 10 15 What happened? Looks for n at run-time,when g is called Finds n in global, returns 15 Here n is a free variable of g Needs to be bound in some enclosing scope Aaargh! def g(y): Changed behavior after definition return y + n whether or not fun works depends NameError on what we did after fundef n = 10 Change I/O behavior too 15 Unlike ML, no new binding: n = 100 just change what n is bound to 105 be careful with free variables! Python tries to avoid overwrites Python tries to avoid overwrites n 100 def f(): n = smash print n f() smash n 100 Python tries to ensure you don t overwrite outer variables How? - unlike C/Java - assignment different from reads - no variable declarations - assignment = declaration! Assignment Revisited x = e 1. Compute object corresponding to e 2. Change the name x to refer to object in the current namespace (added d if missing) i

Python tries to avoid overwrites n 100 def f(): n = smash print n f() smash n 100 What happens? x = 10 def g(): x = x + 1 print x g() x x = 10 def f(): What happened? x = x + 1 print x f() ou may think it should print 11, and leave the global unchanged... but here is what really happens Since x is assigned in the function, it treats x as a local, and so it adds a binding for it. But then it looks up x for evaluating x+1, and it can t find a local x ERROR What happens? x = 10 def g(): global x x = x + 1 print x g() x

What happens? x = [10] def g(): x[0] = abc print x g() x What happens? x = [10] def f(y): def h(z): return (y+x[0]+z) return h foo = f(5) foo <function object> foo(100) 115 foo1 = f( 5) foo1(100) 105