Declarative Computation Model Single assignment store (VRH 2

Slides:



Advertisements
Similar presentations
C. Varela; Adapted w/permission from S. Haridi and P. Van Roy1 Declarative Programming Techniques Accumulators, Difference Lists (VRH ) Carlos Varela.
Advertisements

C. Varela; Adapted from S. Haridi and P. Van Roy1 Declarative Programming Techniques Lazy Execution (VRH 4.5) Carlos Varela RPI Adapted with permission.
Chapter 3 DATA: TYPES, CLASSES, AND OBJECTS. Chapter 3 Data Abstraction Abstract data types allow you to work with data without concern for how the data.
Getting started with ML ML is a functional programming language. ML is statically typed: The types of literals, values, expressions and functions in a.
C. Varela; Adapted w/permission from S. Haridi and P. Van Roy1 Declarative Computation Model From kernel to practical language (CTM 2.6) Exceptions (CTM.
Primitive Data Types There are a number of common objects we encounter and are treated specially by almost any programming language These are called basic.
Introduction to Programming with Java, for Beginners Primitive Types Expressions Statements Variables Strings.
C. Varela; Adapted w/permission from S. Haridi and P. Van Roy1 Declarative Computation Model Defining practical programming languages Carlos Varela RPI.
C. Varela; Adapted w/permission from S. Haridi and P. Van Roy1 Declarative Computation Model Memory management, Exceptions, From kernel to practical language.
C. Varela; Adapted w/permission from S. Haridi and P. Van Roy1 Declarative Computation Model Single assignment store Kernel language syntax Carlos Varela.
C. Varela; Adapted w/permission from S. Haridi and P. Van Roy1 Data Abstraction and State Abstract Data Types (3.7) State/Data Abstraction(6.1, 6.3, 6.4.1,
Introduction to ML - Part 2 Kenny Zhu. What is next? ML has a rich set of structured values Tuples: (17, true, “stuff”) Records: {name = “george”, age.
C. Varela; Adapted w/permission from S. Haridi and P. Van Roy1 Declarative Computation Model Kernel language semantics Carlos Varela RPI Adapted with permission.
Data types and variables
C. Varela; Adapted w/permission from S. Haridi and P. Van Roy1 Declarative Computation Model Memory management, Exceptions, From kernel to practical language.
String Escape Sequences
9/10/2015CS2104, Lecture 81 Programming Language Concepts, COSC Lecture 8 (Multiple) Threads Semantics.
C. Varela; Adapted w/permission from S. Haridi and P. Van Roy1 Declarative Computation Model Memory management (CTM 2.5) Carlos Varela RPI April 6, 2015.
10/18/2015COSC , Lecture 21 Programming Language Concepts, COSC Lecture 2 Oz Syntax, Data structures.
1 Lecture 2: Basic Control and Procedures Per Brand.
Programming for Beginners Martin Nelson Elizabeth FitzGerald Lecture 2: Variables & Data Types.
Introduction to Programming Languages S1.3.1Bina © 1998 Liran & Ofir Introduction to Programming Languages Programming in C.
C. Varela; Adapted w. permission from S. Haridi and P. Van Roy1 Functional Programming: Lists, Pattern Matching, Recursive Programming (CTM Sections ,
11/23/2015CS2104, Lecture 41 Programming Language Concepts, COSC Lecture 4 Procedures, last call optimization.
Python Primer 1: Types and Operators © 2013 Goodrich, Tamassia, Goldwasser1Python Primer.
School of Computer Science & Information Technology G6DICP - Lecture 4 Variables, data types & decision making.
CPS120: Introduction to Computer Science Variables and Constants.
S. Haridi and P. Van Roy1 Declarative Computation Model Seif Haridi KTH Peter Van Roy UCL.
1 Notation and Specification of Concurrency n Concurrency Topics  1. Sequential programming notation  2. Expressing concurrency with co and process 
C. Varela1 Logic Programming (CTM ) Constraint Programming: Constraints and Computation Spaces Carlos Varela Rennselaer Polytechnic Institute.
Java Basics. Tokens: 1.Keywords int test12 = 10, i; int TEst12 = 20; Int keyword is used to declare integer variables All Key words are lower case java.
Chapter 2 Variables and Constants. Objectives Explain the different integer variable types used in C++. Declare, name, and initialize variables. Use character.
© 2004 Pearson Addison-Wesley. All rights reserved August 27, 2007 Primitive Data Types ComS 207: Programming I (in Java) Iowa State University, FALL 2007.
Higher-Order Programming: Iterative computation (CTM Section 3
Chapter 2 Variables.
Principles of programming languages 12: Functional programming
CIS3931 – Intro to JAVA Lecture Note Set 2 17-May-05.
Chapter 2 Basic Computation
Types CSCE 314 Spring 2016.
Functional Programming: Lists, Pattern Matching, Recursive Programming (CTM Sections , 3.2, , 4.7.2) Carlos Varela RPI September 12,
BASIC ELEMENTS OF A COMPUTER PROGRAM
Primitive Data Types August 28, 2006 ComS 207: Programming I (in Java)
ITEC113 Algorithms and Programming Techniques
Types and Values.
Higher-Order Programming: Iterative computation (CTM Section 3
Carlos Varela RPI September 22, 2017 Adapted with permission from:
Variables and Primative Types
Declarative Programming Techniques Accumulators (CTM 3. 4
Carlos Varela Rensselaer Polytechnic Institute December 5, 2017
Type Conversion, Constants, and the String Object
Declarative Computation Model Kernel language semantics (Non-)Suspendable statements (VRH ) Carlos Varela RPI October 11, 2007 Adapted with.
Building Java Programs Chapter 2
Introduction to C++ Programming
Introduction to Java, and DrJava part 1
Object-Oriented Programming Encapsulation Control/Visibility (VRH 7. 3
Chapter 2 Variables.
Introduction to Primitive Data types
C++ Data Types Data Type
Higher-Order Programming: Closures, procedural abstraction, genericity, instantiation, embedding. Control abstractions: iterate, map, reduce, fold, filter.
Python Primer 1: Types and Operators
Introduction to Java, and DrJava
Declarative Programming Techniques Accumulators (CTM 3. 4
Introduction to Programming Concepts (VRH )
Introduction to Programming Concepts
Introduction to Java, and DrJava part 1
Chapter 2 Variables.
Declarative Programming Techniques Accumulators (CTM 3. 4
Variables and Constants
Introduction to Primitive Data types
Presentation transcript:

Declarative Computation Model Single assignment store (VRH 2 Declarative Computation Model Single assignment store (VRH 2.2) Kernel language syntax (VRH 2.3) Carlos Varela RPI September 21, 2006 Adapted with permission from: Seif Haridi KTH Peter Van Roy UCL C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Sequential declarative computation model The single assignment store declarative (dataflow) variables partial values (variables and values are also called entities) The kernel language syntax The kernel language semantics The environment: maps textual variable names (variable identifiers) into entities in the store Interpretation (execution) of the kernel language elements (statements) by the use of an abstract machine Abstract machine consists of an execution stack of statements transforming the store C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Single assignment store The Store A single assignment store is a store (set) of variables Initially the variables are unbound, i.e. do not have a defined value Example: a store with three variables, x1, x2, and x3 x1 unbound x2 unbound x3 unbound C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Single assignment store (2) The Store Variables in the store may be bound to values Example: assume we allow as values, integers and lists of integers x1 unbound x2 unbound x3 unbound C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Single assignment store (3) The Store Variables in the store may be bound to values Assume we allow as values, integers and lists of integers Example: x1 is bound to the integer 314, x2 is bound to the list [1 2 3], and x3 is still unbound x1 314 x2 1 | 2 | 3 | nil x3 unbound C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Declarative (single-assignment) variables A declarative variable starts out as being unbound when created It can be bound to exactly one value Once bound it stays bound through the computation, and is indistinguishable from its value The Store x1 314 x2 1 | 2 | 3 | nil x3 unbound C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

C. Varela; Adapted w/permission from S. Haridi and P. Van Roy Value store A store where all variables are bound to values is called a value store Example: a value store where x1 is bound to integer 314, x2 to the list [1 2 3], and x3 to the record (labeled tree) person(name: “George” age: 25) Functional programming computes functions on values, needs only a value store This notion of value store is enough for functional programming (ML, Haskell, Scheme) The Store x1 314 x2 1 | 2 | 3 | nil x3 person name age “George” 25 C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Operations on the store (1) Single assignment x = v x1 = 314 x2 = [1 2 3] This assumes that x is unbound x1 unbound x2 unbound x3 unbound C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

C. Varela; Adapted w/permission from S. Haridi and P. Van Roy Single-assignment The Store x = value x1 = 314 x2 = [1 2 3] x1 314 x2 unbound x3 unbound C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

C. Varela; Adapted w/permission from S. Haridi and P. Van Roy Single-assignment (2) The Store x = v x1 = 314 x2 = [1 2 3] The single assignment operation (‘=‘) constructs the v in the store and binds the variable x to this value If the variable is already bound, the operation will test the compatibility of the two values If the test fails an error is raised x1 314 x2 1 | 2 | 3 | nil x3 unbound C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

C. Varela; Adapted w/permission from S. Haridi and P. Van Roy Variable identifiers Variable identifiers refers to store entities (variables or values) The environment maps variable identifiers to variables declare X : local X in … ”X” is a (variable) identifier This corresponds to ’environment’ {”X”  x1} The Store ”X” x1 Unbound C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Variable-value binding revisited (1) X = [1 2 3] Once bound the variable is indistinguishable from its value The Store “X” x1 1 | 2 | 3 | nil C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Variable-value binding revisited (2) X = [1 2 3] Once bound the variable is indistinguishable from its value The operation of traversing variable cells to get the value is known as dereferencing and is invisible to the programmer The Store “X” x1 1 | 2 | 3 | nil C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

C. Varela; Adapted w/permission from S. Haridi and P. Van Roy Partial Values A partial value is a data structure that may contain unbound variables The store contains the partial value: person(name: “George” age: x2) declare Y X X = person(name: “George” age: Y) The identifier ’Y’ refers to x2 The Store x1 person “X” name age “George” Unbound x2 “Y” C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

C. Varela; Adapted w/permission from S. Haridi and P. Van Roy Partial Values (2) Partial Values may be complete declare Y X X = person(name: “George” age: Y) Y = 25 The Store x1 person “X” name age “George” x2 25 “Y” C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Variable to variable binding x1 = x2 It is to perform the bind operation between variables Example: X = Y X = [1 2 3] The operations equates (merges) the two variables The Store X x1 unbound Y x2 unbound C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Variable to variable binding (2) x1 = x2 It is to perform a single assignment between variables Example: X = Y X = [1 2 3] The operations equates the two variables (forming an equivalence class) The Store X x1 Y x2 C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Variable to variable binding (3) The Store x1 = x2 It is to perform a single assignment between variables Example: X = Y X = [1 2 3] All variables (X and Y) are bound to [1 2 3] X x1 1 | 2 | 3 | nil Y x2 C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Summary Variables and partial values Declarative variable: is an entity that resides in a single-assignment store, that is initially unbound, and can be bound to exactly one (partial) value it can be bound to several (partial) values as long as they are compatible with each other Partial value: is a data-structure that may contain unbound variables when one of the variables is bound, it is replaced by the (partial) value it is bound to a complete value, or value for short is a data structure that does not contain any unbound variables C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Declaration and use of variables Assume that variables can be declared (introduced) and used separately What happens if we try to use a variable before it is bound? Use whatever value happens to be in the memory cell occupied by the variable (C, C++) The variable is initialized to a default value (Java), use the default An error is signaled (Prolog). Makes sense if there is a single activity running (pure sequential programs) An attempt to use the variable will wait (suspends) until another activity binds the variable (Oz/Mozart) C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Declaration and use of variables (2) An attempt to use the variable will wait (suspends) until another activity binds the variable (Oz/Mozart) Declarative (single assignment) variables that have this property are called dataflow variables It allows multiple operations to proceed concurrently giving the correct result Example: A = 23 running concurrently with B = A+1 Functional (concurrent) languages do not allow the separation between declaration and binding (ML, Haskell, and Erlang) C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Kernel language syntax The following defines the syntax of a statement, s denotes a statement s ::= skip empty statement | x = y variable-variable binding | x = v variable-value binding | s1 s2 sequential composition | local x in s1 end declaration | if x then s1 else s2 end conditional | ‘{‘ x y1 … yn ‘}’ procedural application | case x of pattern then s1 else s2 end pattern matching v ::= ... value expression pattern ::= ... C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

C. Varela; Adapted w/permission from S. Haridi and P. Van Roy Variable identifiers x , y, z stand for variables In the concrete kernel language variables begin with upper-case letter followed by a (possibly empty) sequence of alphanumeric characters or underscore Any sequence of printable characters within back-quote Examples: X Y1 Hello_World `hello this is a $5 bill` (back-quote) C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

C. Varela; Adapted w/permission from S. Haridi and P. Van Roy Values and types A data type is a set of values and a set of associated operations Example: Int is the the data type ”Integer”, i.e set of all integer values 1 is of type Int Int has a set of operations including +,-,*,div, etc The model comes with a set of basic types Programs can define other types, e.g., abstract data types ADT C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

C. Varela; Adapted w/permission from S. Haridi and P. Van Roy Data types Value Number Record Procedure Tuple Int Float Literal List Char Atom Boolean String true false C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

C. Varela; Adapted w/permission from S. Haridi and P. Van Roy Data types (2) Value Number Record Procedure Tuple Int Float Literal List Char Atom Boolean String true false C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

C. Varela; Adapted w/permission from S. Haridi and P. Van Roy Value expressions v ::= procedure | record | number procedure ::= proc ‘{‘$ y1 … yn’}’ s end record, pattern ::= literal | literal ([feature1 : x1 … featuren : xn]) literal ::= atom | bool feature ::= int | atom | bool bool ::= true | false number ::= int | float C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

C. Varela; Adapted w/permission from S. Haridi and P. Van Roy Numbers Integers 314, 0 ~10 (minus 10) Floats 1.0, 3.4, 2.0e2, 2.0E2 (2102) C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

C. Varela; Adapted w/permission from S. Haridi and P. Van Roy Atoms and booleans A sequence starting with a lower-case character followed by characters or digits, … person, peter ‘Seif Haridi’ Booleans: true false C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

C. Varela; Adapted w/permission from S. Haridi and P. Van Roy Records Compound representation (data-structures) l(f1 : x1 … fn : xn) l is a literal Examples person(age:X1 name:X2) person(1:X1 2:X2) ‘|’(1:H 2:T) nil person C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Syntactic sugar (tuples) Tuples l(x1 … xn) (tuple) This is equivalent to the record l(1: x1 … n: xn) Example: person(‘George’ 25) This is the record person(1:‘George’ 2:25) C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Syntactic sugar (lists) Lists x1 | x2 (a cons with the infix operator ‘|’) This is equivalent to the tuple ‘|’(x1 x2) Example: H | T This is the tuple ‘|’(H T) C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Syntactic sugar (lists) Lists x1 | x2 | x3 ‘|’ associates to the right x1 | (x2 | x3) Example: 1 | 2 | 3 | nil Is 1 | ( 2 | (3 | nil )) ‘|’ 1 ‘|’ 2 ‘|’ 3 nil C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Syntactic sugar (complete lists) Example: [1 2 3] Is 1 | ( 2 | (3 | nil )) ‘|’ 1 ‘|’ 2 ‘|’ 3 nil C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

C. Varela; Adapted w/permission from S. Haridi and P. Van Roy Strings A string is a list of character codes enclosed with double quotes Ex: ”E=mc^2” Means the same as [69 61 109 99 94 50] C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Procedure declarations According to the kernel language x = proc {$ y1 … yn} s end is a legal statement It binds x to a procedure value This statement actually declares (introduces) a procedure Another syntactic variant which is more familiar is proc {x y1 … yn} s end This introduces (declares) the procedure x C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Operations of basic types Arithmetics Floating point numbers: +,-,*, and / Integers: +,-,*,div (integer division, i.e. truncate fractional part), mod (the remainder after a division, e.g.10 mod 3 = 1) Record operations Arity, Label, and ”.” X = person(name:”George” age:25) {Arity X} = [age name] {Label X} = person, X.age = 25 Comparisons Boolean comparisons, including ==, \= (equality) Numeric comparisons, =<, <, >, >=, compares integers, floats, and atoms C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

C. Varela; Adapted w/permission from S. Haridi and P. Van Roy Value expressions v ::= procedure | record | number | basicExpr basicExpr ::= ... | numberExpr | ... numberExpr ::= x1 + x2 | ... ..... C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Syntactic sugar (multiple variables) Multiple variable introduction local X Y in statement end is transformed to local X in local Y in statement end end C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Syntactic sugar (basic expressions) Basic expression nesting if basicExpr then statement1 else statement2 end is transformed to local T in T = basicExpr if T then statement1 else statement2 end end where T is a fresh (’new’) variable identifier C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Syntactic sugar (variables) Variable initialization local X = value in statement end Is transformed to local X in X = value statement end C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

C. Varela; Adapted w/permission from S. Haridi and P. Van Roy Exercises Using Oz, perform a few basic operations on numbers, records, and booleans (see Appendix B1-B3) Explain the behavior of the declare statement in the interactive environment. Give an example of an interactive Oz session where “declare” and “declare … in” produce different results. Explain why. VRH Exercise 2.9.1 *Describe what an anonymous procedure is, and write one in Oz. When are anonymous procedures useful? C. Varela; Adapted w/permission from S. Haridi and P. Van Roy