Title: Declarative Computation Model Kernel language semantics
1Declarative Computation ModelKernel language
semantics
- Carlos Varela
- RPI
- Adapted with permission from
- Seif Haridi
- KTH
- Peter Van Roy
- UCL
2Kernel 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? ...
3Examples
- local X in X 1 end
- local X Y T Z in X 5 Y 10 T (XgtY) if T
then Z X else Z Y end Browse Zend - local S T in
- S proc X Y Y XX end
- S 5 T
- Browse T
- end
4Procedure abstraction
- Any statement can be abstracted to a procedure by
selecting a number of the free variable
identifiers and enclosing the statement into a
procedure with the identifiers as parameters - if X gt Y then Z X else Z Y end
- Abstracting over all variablesproc Max X Y
Z if X gt Y then Z X else Z Y endend - Abstracting over X and Zproc LowerBound X
Z if X gt Y then Z X else Z Y endend
5Computations (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
6Computations (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 pair
- ( ST , ? )
- ST is a stack of semantic statements
- A computation is a sequence of execution
states( ST0 , ?0 ) ? ( ST1 , ?1 ) ? ( ST2 , ?2 )
? ...
7Semantics
- 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
8Calculating with environments
- E is mapping from identifiers to entities (both
store variables and values) in the store - The notation E(?y?) retrieves the entity
associated with the identifier ?x? from the store - The notation E ?y?1 ? x1, ? y?2 ? x2, ... , ?
y?n ? xn - denotes a new environment E constructed from E
by adding the mappings ?y?1 ? x1, ? y?2 ? x2,
... , ? y?n ? xn - E(?z?) is xk if ?z? is equal to ? y?k ,
otherwise E(?z?) is equal to E(?z?) - The notation E?y?1, ? y?2, ... , ? y?n denotes
the projection of E onto the set ?y?1, ? y?2,
... , ? y?n, i.e., E restricted to the members
of the set
9Calculating with environments (2)
- E X ? 1, Y ? 2 3, Z ? xi
- E E X ? 2
- E(X) 2, E(X) 1
- EX,Y restricts E to the domain X,Y,i.e.,
it is equal to X ? 1, Y ? 2 3
10Calculating with environments (3)
- local X in X 1 (E) local X in X 2 (E)
Browse X end (E) Browse Xend
11skip
- The semantic statement is (skip, E)
- Continue to next execution step
12skip
- The semantic statement is (skip, E)
- Continue to next execution step
?
?
(skip, E) ST
ST
13Sequential 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
14Variable 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
15Variable 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
16Variable-variable equality
- The semantic statement is ( ?x? ?y?, E )
- Bind E(?x?) and E(?y?) in the store
-
17Variable-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? -
18Lexical scoping
- Free and bound identifier occurrences
- An identifier occurrence is bound with respect to
a statement ?s? if it is in the scope of a
declaration inside ?s? - A variable identifier is declared either by a
local statement, as a parameter of a procedure,
or implicitly declared by a case statement - An identifier occurrence is free otherwise
- In a running program every identifier is bound
(i.e., declared)
19Lexical scoping (2)
- proc P X local Y in Y 1 Browse Y end X
Yend
Bound Occurrences
Free Occurrences
20Lexical scoping (3)
- local Arg1 Arg2 in Arg1 111111 Arg2
999999 Res Arg1Arg2end
Bound Occurrences
Free Occurrences
This is not a runnable program!
21Lexical scoping (4)
- local Res in local Arg1 Arg2 in Arg1
111111 Arg2 999999 Res
Arg1Arg2 end Browse Resend
22Lexical scoping (5)
- local P Q inproc P Q endproc Q Browse
hello endlocal Q in proc Q Browse hi
end Pend - end
23Procedure values
- Constructing a procedure value in the store is
not simple because a procedure may have external
references
local P Q inQ proc Browse hello endP
proc Q endlocal Q in Q proc
Browse hi end Pend end
24Procedure values (2)
( , )
x1
P
proc Q end
Q ? x2
local P Q inQ proc Browse hello endP
proc Q endlocal Q in Q proc
Browse hi end Pend end
( , )
x2
proc Browse hello end
Browse ? x0
25Procedure values (3)
- The semantic statement is (proc ?x? ?y1? ...
?yn? ?s? end, E) - ?y1? ... ?yn? are the (formal) parameters of the
procedure - Other free identifiers of ?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 of ?s?
(proc ?y1? ... ?yn? ?s? end , CE)
26Procedure 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)
27Procedure introduction
- The semantic statement is (?x? proc ?y1? ...
?yn? ?s? end, E) - Environment is ?x? ? xP, ...
- 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
28Suspendable statements
- The remaining statements require ?x? to be bound
in order to execute - The activation condition (E(?x?) is determined),
i.e., bound to a number, 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
29Life 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
30Conditional
- The semantic statement is ( if ?x? then ?s1?
else ?s2? end , E) - 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
- The activation condition (E(?x?) is determined)
is false suspend
31Procedure application
- The semantic statement is ( ?x? ?y1? ?yn? ,
E) - The activation condition (E(?x?) is determined)
is true - If E(?x?) is not procedure value, or a procedure
with arity that is not equal to n, raise an error - E(?x?) is (proc ?z1? ... ?zn? ?s? end, CE) ,
push ( ?s? , CE ?z1? ? E(?y1?) ?zn? ?
E(?yn?) ) on the stack - The activation condition (E(?x?) is determined)
is false suspend
32Case statement
- The semantic statement is ( case ?x? of ?l?
(?f1? ?x1? ?fn? ?xn?) - then ?s1? else ?s2? end , E)
- The activation condition (E(?x?) is determined)
is true - 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
- The activation condition (E(?x?) is determined)
is false suspend
33Execution examples
- local Max C in proc Max X Y Z ?s?3 if X gt
Y then ZX else ZY end end Max 3 5 Cend
?s?2
?s?1
34Execution examples (2)
local Max C in proc Max X Y Z ?s?3 if X gt
Y then ZX else ZY end end ?s?4 Max 3 5 Cend
?s?2
?s?1
- 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?3end , ?) , c )
35Execution examples (3)
local Max C in proc Max X Y Z ?s?3 if X gt
Y then ZX else ZY end end ?s?4 Max 3 5 Cend
?s?2
?s?1
- After Max binding( (?s?4, Max ? m, C ? c) ,
m (proc X Y Z ?s?3end , ?) , c ) - After procedure call( (?s?3, X ? t1, Y ? t2,
Z ? c) , m (proc X Y Z ?s?3end , ?) ,
t13, t25, c )
36Execution examples (4)
local Max C in proc Max X Y Z ?s?3 if X gt
Y then ZX else ZY end end ?s?4 Max 3 5 Cend
?s?2
?s?1
- After procedure call( (?s?3, X ? t1, Y ? t2,
Z ? c) , m (proc X Y Z ?s?3end , ?) ,
t13, t25, c ) - After T (XgtY)( (?s?3, X ? t1, Y ? t2, Z ?
c, T ? t) , m (proc X Y Z ?s?3end , ?)
, t13, t25, c, tfalse ) - ( (ZY , X ? t1, Y ? t2, Z ? c, T ? t) ,
m (proc X Y Z ?s?3end , ?) , t13, t25, c,
tfalse )
37Execution examples (5)
local Max C in proc Max X Y Z ?s?3 if X gt
Y then ZX else ZY end end ?s?4 Max 3 5 Cend
?s?2
?s?1
- ( (ZY , X ? t1, Y ? t2, Z ? c, T ? t) ,
m (proc X Y Z ?s?3end , ?) , t13, t25, c,
tfalse ) - ( , m (proc X Y Z ?s?3end , ?) ,
t13, t25, c5, tfalse )
38Procedures with external references
- local LB Y C in Y 5 proc LB X Z ?s?3
if X gt Y then ZX else ZY end end LB 3
Cend
?s?1
?s?2
39Procedures with external references
- local LB Y C in Y 5 proc LB X Z ?s?3
if X gt Y then ZX else ZY end end LB 3
Cend
?s?1
?s?2
- The procedure value of LB is
- (proc X Z ?s?3 end , Y ? y)
- The store is y 5,
40Procedures with external references
- local LB Y C in Y 5 proc LB X Z ?s?3
if X gt Y then ZX else ZY end end LB 3
Cend
?s?1
?s?2
- The procedure value of LB is
- (proc X Z ?s?3 end , Y ? y)
- The store is y 5,
- STACK ( LB T C , Y ? y , LB ? lb, C ? c, T ?
t) - STORE y 5, lb (proc X Z ?s?3 end , Y ?
y) , t 3, c
41Procedures with external references
- local LB Y C in Y 5 proc LB X Z ?s?3
if X gt Y then ZX else ZY end end LB 3
Cend
?s?1
?s?2
- STACK ( LB T C , Y ? y , LB ? lb, C ? c, T ?
t) - STORE y 5, lb (proc X Z ?s?3 end , Y ?
y) , t 3, c - STACK (?s?3 , Y ? y , X ? t , Z ? c)
- STORE y 5, lb (proc X Z ?s?3 end , Y ?
y) , t 3, c
42Procedures with external references
- local LB Y C in Y 5 proc LB X Z ?s?3
if X gt Y then ZX else ZY end end LB 3
Cend
?s?1
?s?2
- STACK (?s?3 , Y ? y , X ? t , Z ? c)
- STORE y 5, lb (proc X Z ?s?3 end , Y ?
y) , t 3, c - STACK (ZY , Y ? y , X ? t , Z ? c)
- STORE y 5, lb (proc X Z ?s?3 end , Y ?
y) , t 3, c - STACK
- STORE y 5, lb (proc X Z ?s?3 end , Y ?
y) , t 3, c 5
43Exercises
- Explain the difference between static binding and
dynamic binding. Does dynamic binding require
keeping an environment in a closure (procedure
value)? Why or why not? - VRH Exercise 2.2 (page 107)
- VRH Exercise 2.7 (page 108) translate example to
kernel language and execute using operational
semantics. - Write an example of a program that suspends. Now,
write an example of a program that never
terminates. Use the operational semantics to
prove suspension or non-termination.
44Exercises
- Translate the following function to the kernel
language - fun AddList L1 L2
- case L1 of H1T1 then
- case L2 of H2T2 then
- H1H2AddList T1 T2
- end
- else nil end
- end
- Using the operational semantics, execute the
call AddList 1 2 3 4 - Read VRH Sections 2.5-2.7.