Declarative Computation Model Kernel language semantics (Non-)Suspendable statements (VRH 2.4.3-2.4.4) Carlos Varela RPI October 11, 2007 Adapted with.

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.
Rigorous Software Development CSCI-GA Instructor: Thomas Wies Spring 2012 Lecture 11.
1 Compiler Construction Intermediate Code Generation.
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.
Comp 205: Comparative Programming Languages Semantics of Imperative Programming Languages denotational semantics operational semantics logical semantics.
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.
1 Operational Semantics Mooly Sagiv Tel Aviv University Textbook: Semantics with Applications.
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,
Denotational Semantics Syntax-directed approach, generalization of attribute grammars: –Define context-free abstract syntax –Specify syntactic categories.
C. Varela; Adapted w. permission from S. Haridi and P. Van Roy1 Introduction to Programming Concepts Carlos Varela RPI Adapted with permission from: Seif.
C. Varela; Adapted w/permission from S. Haridi and P. Van Roy1 Data Abstraction, State, and Objects Abstract Data Types (VRH 3.7) State / Data Abstraction(VRH.
C. Varela; Adapted w/permission from S. Haridi and P. Van Roy1 Declarative Computation Model Kernel language semantics Carlos Varela RPI Adapted with permission.
C. Varela; Adapted from S. Haridi and P. Van Roy1 Object-Oriented Programming Objects, Classes and Inheritance (VRH 7.1-4) Polymorphism (VRH 6.4.3) Carlos.
C. Varela; Adapted with permission from S. Haridi and P. Van Roy1 Declarative Concurrency (VRH4) Carlos Varela RPI Adapted with permission from: Seif Haridi.
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 Programming Techniques Non-declarative needs (VRH 3.8) Program design in the.
Functional programming: LISP Originally developed for symbolic computing First interactive, interpreted language Dynamic typing: values have types, variables.
Operational Semantics Semantics with Applications Chapter 2 H. Nielson and F. Nielson
C. Varela; Adapted w/permission from S. Haridi and P. Van Roy1 Declarative Programming Techniques Declarativeness, iterative computation (VRH 3.1-2) Higher-order.
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.
9/10/2015CS2104, Lecture 81 Programming Language Concepts, COSC Lecture 8 (Multiple) Threads Semantics.
© 2002 P. Van Roy and S. Haridi 1 Teaching Programming with the Kernel Language Approach October 7, 2002 Functional and Declarative Programming in Education.
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.
S. Haridi and P. Van Roy1 Lazy Execution Seif Haridi KTH Peter Van Roy UCL.
1 Causal-Consistent Reversible Debugging Ivan Lanese Focus research group Computer Science and Engineering Department University of Bologna/INRIA Bologna,
1 Lecture 2: Basic Control and Procedures Per Brand.
Semantics. Semantics is a precise definition of the meaning of a syntactically and type-wise correct program. Ideas of meaning: –Operational Semantics.
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.
S. Haridi and P. Van Roy1 Introduction to Programming Seif Haridi KTH Peter Van Roy UCL.
C. Varela1 Logic Programming (PLP 11, CTM 9.1) Terms, Resolution, Unification, Search, Backtracking (Prolog) Relational Computation Model (Oz) Carlos Varela.
S. Haridi and P. Van Roy1 Declarative Computation Model Seif Haridi KTH Peter Van Roy UCL.
Operational Semantics Mooly Sagiv Tel Aviv University Textbook: Semantics with Applications Chapter.
C. Varela1 Logic Programming (CTM ) Constraint Programming: Constraints and Computation Spaces Carlos Varela Rennselaer Polytechnic Institute.
Formal Semantics of Programming Languages 虞慧群 Topic 2: Operational Semantics.
Operational Semantics Mooly Sagiv Tel Aviv University Sunday Scrieber 8 Monday Schrieber.
Operational Semantics Mooly Sagiv Reference: Semantics with Applications Chapter 2 H. Nielson and F. Nielson
Operational Semantics Mooly Sagiv Reference: Semantics with Applications Chapter 2 H. Nielson and F. Nielson
Higher-Order Programming: Iterative computation (CTM Section 3
Types in Programming Languages Dynamic and Static Typing, Type Inference (CTM 2.8.3, EPL* 4) Abstract Data Types (CTM 3.7) Monads (GIH** 9) Carlos Varela.
Functional Programming: Lists, Pattern Matching, Recursive Programming (CTM Sections , 3.2, , 4.7.2) Carlos Varela RPI September 12,
Information Science and Engineering
Carlos Varela Rennselaer Polytechnic Institute November 11, 2016
Carlos Varela Rennselaer Polytechnic Institute September 5, 2017
Higher-Order Programming: Iterative computation (CTM Section 3
Carlos Varela RPI September 22, 2017 Adapted with permission from:
State, Object-Oriented Programming Explicit State, Polymorphism (CTM 6
Graph-Based Operational Semantics
Declarative Programming Techniques Accumulators (CTM 3. 4
Carlos Varela Rensselaer Polytechnic Institute December 5, 2017
Carlos Varela Rensselaer Polytechnic Institute November 14, 2017
Declarative Programming Techniques Declarativeness, iterative computation (CTM ) Higher-order programming (CTM 3.6) Abstract data types (CTM.
Carlos Varela Rennselaer Polytechnic Institute September 4, 2015
Object-Oriented Programming Encapsulation Control/Visibility (VRH 7. 3
Programming Languages and Compilers (CS 421)
Programming Languages and Compilers (CS 421)
Higher-Order Programming: Closures, procedural abstraction, genericity, instantiation, embedding. Control abstractions: iterate, map, reduce, fold, filter.
Declarative Concurrency (CTM 4)
Defining A Formal Semantics For The Rosetta Specification Language
Declarative Programming Techniques Accumulators (CTM 3. 4
Introduction to Programming Concepts (VRH )
Declarative Computation Model Single assignment store (VRH 2
Introduction to Programming Concepts
Declarative Programming Techniques Accumulators (CTM 3. 4
Carlos Varela Rennselaer Polytechnic Institute September 6, 2019
Presentation transcript:

Declarative Computation Model Kernel language semantics (Non-)Suspendable statements (VRH 2.4.3-2.4.4) Carlos Varela RPI October 11, 2007 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 kernel language semantics The environment: maps textual variable names (variable identifiers) into entities in the store Abstract machine consists of an execution stack of semantic statements transforming the store Interpretation (execution) of the kernel language elements (statements) by the use of an abstract machine Non-suspendable statements Suspendable statements 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 ::= proc { $ y1 … yn } s1 end | ... value expression pattern ::= ... C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Computations (abstract machine) A computation defines how the execution state is transformed step by step from the initial state to the final state A single assignment store  is a set of store variables, a variable may be unbound, bound to a partial value, or bound to a group of other variables An environment E is mapping from variable identifiers to variables or values in , e.g. {X  x1, Y  x2} A semantic statement is a pair ( s , E ) where s is a statement ST is a stack of semantic statements C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Computations (abstract machine) A computation defines how the execution state is transformed step by step from the initial state to the final state The execution state is a pair ( ST ,  ) where ST is a stack of semantic statements and  is a single assignment store A computation is a sequence of execution states ( ST0 , 0 )  ( ST1 , 1 )  ( ST2 , 2 )  ... C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

C. Varela; Adapted w/permission from S. Haridi and P. Van Roy Semantics To execute a program (i.e., a statement) s the initial execution state is ( [ (s , ) ] ,  ) ST has a single semantic statement (s , ) The environment E is empty, and the store  is empty [ ... ] denotes the stack At each step the first element of ST is popped and execution proceeds according to the form of the element The final execution state (if any) is a state in which ST is empty C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

C. Varela; Adapted w/permission from S. Haridi and P. Van Roy skip The semantic statement is (skip, E) Continue to next execution step   (skip, E) ST + + ST C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Sequential composition The semantic statement is (s1 s2 , E) Push (s2 , E) and then push (s1 , E) on ST Continue to next execution step  (s1 , E) (s2 , E) ST  (s1 s2 , E) ST + + 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 declaration The semantic statement is (local x in s end, E) Create a new store variable x in the Store Let E’ be E+{x  x}, i.e. E’ is the same as E but the identifier x is mapped to x. Push (s , E’) on ST Continue to next execution step 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 declaration The semantic statement is (local X in s end, E) ’   + (local X in s end , ) ST (s , ) ST + + xi unbound E E X = xi C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Variable-variable equality The semantic statement is ( x = y, E ) Bind E(x) and E(y) in the store C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Variable-value equality The semantic statement is ( x = v, E ) Where v is a record, a number, or a procedure Construct the value in the store and refer to it by the variable y. Bind E(x) and y in the store We have seen how to construct records and numbers, but what is a procedure value? C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

C. Varela; Adapted w/permission from S. Haridi and P. Van Roy Procedure values Constructing a procedure value in the store is not simple because a procedure may have external references local P Q in Q = proc {$} {Browse hello} end P = proc {$} {Q} end local Q in Q = proc {$} {Browse hi} end {P} end 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 Procedure values (2) x1 ( , ) P proc {$} {Q} end Q  x2 local P Q in Q = proc {$} {Browse hello} end P = proc {$} {Q} end local Q in Q = proc {$} {Browse hi} end {P} end end x2 ( , ) proc {$} {Browse hello} end Browse  x0 C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

C. Varela; Adapted w/permission from S. Haridi and P. Van Roy Procedure values (3) The semantic statement is (x = proc {$ y1 ... yn} s end, E) y1 ... yn are the (formal) parameters of the procedure Other free identifiers in s are called external references z1 ... zk These are defined by the environment E where the procedure is declared (lexical scoping) The contextual environment of the procedure CE is E |{z1 ... zk} When the procedure is called CE is used to construct the environment for execution of s (proc {$ y1 ... yn } s end , CE) C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

C. Varela; Adapted w/permission from S. Haridi and P. Van Roy Procedure values (4) Procedure values are pairs: (proc {$ y1 ... yn} s end , CE) They are stored in the store just as any other value (proc {$ y1 ... yn } s end , CE) C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Procedure introduction The semantic statement is (x = proc {$ y1 ... yn} s end, E) Create a contextual environment: CE = E |{z1 ... zk} where z1 ... zk are external references in s. Create a new procedure value of the form: (proc {$ y1 ... yn} s end, CE) , refer to it by the variable xP Bind the store variable E(x) to xP Continue to next execution step C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Suspendable statements The remaining statements require x to be bound in order to execute The activation condition (E(x) is determined), is that x be bound to a number, a record or a procedure value s ::= … | if x then s1 else s2 end conditional | { x y1 … yn } procedural application | case x of pattern matching pattern then s1 else s2 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 Life cycle of a thread ST not empty A & B / Execute Running B/Resume A A & not B/ Suspend not A /Terminate Top(ST) activation condition is true Suspended Terminated B C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

C. Varela; Adapted w/permission from S. Haridi and P. Van Roy Conditional The semantic statement is ( if x then s1 else s2 end , E) If the activation condition (E(x) is determined) is true: If E(x) is not Boolean (true, false), raise an error E(x) is true, push (s1 , E) on the stack E(x) is false, push (s2 , E) on the stack If the activation condition (E(x) is determined) is false: Suspend C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

Procedure application The semantic statement is ({ x y1 … yn } , E) If the activation condition (E(x) is determined) is true: If E(x) is not a procedure value, or it is a procedure with arity that is not equal to n, raise an error If E(x) is (proc {$ z1 ... zn} s end, CE) , push ( s , CE + {z1  E(y1) … zn  E(yn)} ) on the stack If the activation condition (E(x) is determined) is false: Suspend C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

C. Varela; Adapted w/permission from S. Haridi and P. Van Roy Case statement The semantic statement is ( case x of l (f1 : x1 … fn : xn) then s1 else s2 end , E) If the activation condition (E(x) is determined) is true: If E(x) is a record, and the label of E(x) is l and its arity is [f1 … fn]: push (local x1 = x. f1 … xn = x. fn in s1 end, E) on the stack Otherwise, push (s2, E) on the stack If the activation condition (E(x) is determined) is false: Suspend C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

C. Varela; Adapted w/permission from S. Haridi and P. Van Roy Execution examples local Max C in proc {Max X Y Z} s3 if X >= Y then Z=X else Z=Y end end {Max 3 5 C} end s1 s2 C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

C. Varela; Adapted w/permission from S. Haridi and P. Van Roy Execution examples (2) local Max C in proc {Max X Y Z} s3 if X >= Y then Z=X else Z=Y end end s4 {Max 3 5 C} end s1 s2 Initial state ([(s1, )], ) After local Max C in … ( [(s2, {Max  m, C  c})], {m, c} ) After Max binding ( [(s4, {Max  m, C  c})], {m = (proc{$ X Y Z} s3 end , ) , c} ) C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

C. Varela; Adapted w/permission from S. Haridi and P. Van Roy Execution examples (3) local Max C in proc {Max X Y Z} s3 if X >= Y then Z=X else Z=Y end end s4 {Max 3 5 C} end s1 s2 After Max binding ( [(s4, {Max  m, C  c})], {m = (proc{$ X Y Z} s3 end , ) , c} ) After procedure call ( [(s3, {X  t1, Y  t2, Z  c}) ], {m = (proc{$ X Y Z} s3 end , ) , t1=3, t2=5, c} ) C. Varela; Adapted w/permission from S. Haridi and P. Van Roy

C. Varela; Adapted w/permission from S. Haridi and P. Van Roy Execution examples (4) local Max C in proc {Max X Y Z} s3 if X >= Y then Z=X else Z=Y end end s4 {Max 3 5 C} end s1 s2 After procedure call ( [(s3, {X  t1, Y  t2, Z  c})], {m = (proc{$ X Y Z} s3 end , ) , t1=3, t2=5, c} ) After T = (X>=Y) ( [(s3, {X  t1, Y  t2, Z  c, T  t}) ], {m = (proc{$ X Y Z} s3 end , ) , t1=3, t2=5, c, t=false} ) ( [(Z=Y , {X  t1, Y  t2, Z  c, T  t}) ], {m = (proc{$ X Y Z} s3 end , ) , t1=3, t2=5, c, t=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 Execution examples (5) local Max C in proc {Max X Y Z} s3 if X >= Y then Z=X else Z=Y end end s4 {Max 3 5 C} end s1 s2 ( [(Z=Y , {X  t1, Y  t2, Z  c, T  t}) ], {m = (proc{$ X Y Z} s3 end , ) , t1=3, t2=5, c, t=false} ) ( [ ], {m = (proc{$ X Y Z} s3 end , ) , t1=3, t2=5, c=5, t=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 Exercises Does dynamic binding require keeping an environment in a closure (procedure value)? Why or why not? VRH Exercise 2.9.2 (page 107) *After translating the following function to the kernel language: fun {AddList L1 L2} case L1 of H1|T1 then case L2 of H2|T2 then H1+H2|{AddList T1 T2} end else nil end Use the operational semantics to execute the call {AddList [1 2] [3 4]} C. Varela; Adapted w/permission from S. Haridi and P. Van Roy