2nd march 2010ifip wg 2.11 st andrews1 costing by construction greg michaelson school of...
TRANSCRIPT
![Page 1: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/1.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 1
Costing by construction
Greg MichaelsonSchool of Mathematical & Computer
SciencesHeriot-Watt University
![Page 2: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/2.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 2
Overview
• how can we use cost information (e.g. WCET, space) to guide software construction?– mini-Hume
• compilation to stack machine• cost model
– box calculus– augmenting box calculus with costs– costulator
![Page 3: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/3.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 3
Overview
• mature WCET/space costs models for many languages
• analysis tools are whole program– apply after not during initial software
construction
• can we see cost implications at every stage as we construct software?
![Page 4: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/4.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 4
Hume
• with Kevin Hammond (St Andrews)
• formally motivated language for resource aware system construction
• concurrent finite state boxes joined by wires
• box transitions from patterns to expressions
• rich polymorphic types
![Page 5: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/5.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 5
Hume
• strong separation of:– coordination: between boxes & environment– expression: within boxes
• strong formal foundations– semantics + type system
• tool chain via abstract machine to code
• amortised cost models instantiated for concrete platforms
![Page 6: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/6.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 6
Hume
• Turing complete - too big for this presentation
• mini-Hume– integers types only– no functions– no if/case– no * (ignore) pattern or expression
![Page 7: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/7.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 7
mini-Humebox genin (n)out (n’,r)match (x) -> (x+1,x);
box din (x)out (y)match (n) -> (2*n);
stream output to “std_out”;
wire gen(gen.n’initially 0)(gen.n,d.x);
wire d (gen.r) (output);
n gen
x -> (x+1,x)
n’ r
x d
n -> 2*n
y
output
![Page 8: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/8.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 8
mini-Hume
prog -> coord ; [coord]coord -> box | wire | streambox -> box id in (vars) out (vars) match (patts) -> (exp) | ...vars -> var | var , varspatts -> int | var | patt , pattsexp -> int | var | exp op exp | exp , expwire -> wire id (ins) (outs)ins -> var | var.var [initially int] | ins , insouts -> var | var.var | outs , outsstream -> stream id [from/to] “path”
![Page 9: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/9.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 9
Execution model
forever
for each box - execute
find pattern matching inputs bind pattern variables
evaluate exp to produce outputs
for each box - super step
copy outputs to associated inputs
![Page 10: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/10.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 10
Stack machinePUSHI integer stack[sp++] = integer VAR identifier allocate next memory addressPUSHM identifier stack[sp++] = mem[addr(identifier)]POPM identifier mem[addr(identifier)] = stack[--sp] POP sp--ADD stack[sp-2] = stack[sp-2]+stack[sp-1]; sp--SUB stack[sp-2] = stack[sp-2]-stack[sp-1]; sp--MULT stack[sp-2] = stack[sp-2]*stack[sp-1]; sp--DIV stack[sp-2] = stack[sp-2]/stack[sp-2]; sp--LABEL label JNEG label if(stack[sp--]<0) goto labelJZERO label if(stack[sp--]==0) goto labelJPOS label if(stack[sp--]>0) goto labelJNZERO label if(stack[sp--]!=0) goto labelJMP label goto label
![Page 11: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/11.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 11
Compilationbox incdin (s,n) out (s',n',r) match (0,x) -> (1,x+1,x+1) | (1,x) -> (0,x+1,2*x);
stream output to "std_out";
wire incd(incd.s' initially 0, incd.n' initially 0)(incd.s,incd.n,output);
LABEL incd0- box/patt 0
PUSHM incdI0
PUSHI 0
SUB
JNZERO incd1- exp 0
PUSHI 1
POPM incdO0
PUSHM incdI1
PUSHI 1
ADD
POPM incdO1
PUSHM incdI1
PUSHI 1
ADD
POPM incdO2
JMP incdEND
- links
VAR incdI0 - s
VAR incdI1 - n
VAR incdO0 – s’
VAR incdO1 – n’
VAR incdO2 - r
VAR output
- initially
PUSHI 0
POPM incdI0
PUSHI 0
POPM incdI1
- execute
LABEL _MAIN
- pattern 1
LABEL incd1
...
- (pattern 2)
LABEL incd2
- super step
LABEL incdEND
PUSHM incdO0
POPM incdI0
PUSHM incdO1
POPM incdI1
PUSHM incdO2
POPM output
- loop
SHOW
JMP _MAIN
![Page 12: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/12.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 12
Cost model
• box costs in executionbox -> box id
in (vars) out (vars) match (patts) -> (exps) | ... - max ((Σcost(patti) )+ cost (expi))+1 - JMP
patt -> int - 4 – PUSHM,PUSHI,SUB,JNZvar - 0patt , patts - cost(patt) + cost(patts)
exp -> int - 1 - PUSHIvar - 1 - PUSHMexp1 op exp2 - cost(exp1)+cost(exp2)+1 - opexp , exps - cost(exp)+1+cost(exps) - POPM
![Page 13: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/13.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 13
Cost model
• wire costs in super stepwire -> wire id (ins) (outs) - cost(ins)+cost(outs)
ins -> var - 2 – PUSHM,POPM
var.var [initially int] - 2[+2] – PUSHM,POPM
[+PUSHI,POPM]
ins1 , ins2 - cost(ins1)+cost(ins2)
outs -> var - 2 – PUSHM,POPM
var.var - 2 – PUSHM,POPM
outs1 , outs2 - cost(outs1)+cost(outs2)
![Page 14: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/14.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 14
Box calculus
• with Gudmund Grov (Heriot-Watt/ Edinburgh)
• based on BMF, fold/unfold, FP etc
• rules to:– introduce/eliminate boxes/wires– split/join boxes horizontally/vertically
• NB rules affect coordination and expressions layers
![Page 15: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/15.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 15
Box calculus
x -> f (g x) (x,y) -> (f x,g y)
x -> g x
y -> f y
x -> f x y -> g y
x -> x
identity vertical split/join horizontal split/join
![Page 16: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/16.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 16
Box calculus
x -> x x -> x
(x,y) -> x x -> (x,y)
input introduction/elimination output introduction/elimination
![Page 17: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/17.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 17
Costing by construction
• augment rules with cost judgements
• construct software from scratch – use rules to justify each step– show cost impact of each rule application
![Page 18: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/18.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 18
Box calculus + costs
x -> f (g x)
x -> g x
y -> f y
x -> x
identity vertical split/join
+/- cost patt x
+/- cost exp x +/- 2 - super step from x
+/- 2 - super step to x
+/- cost patt y
+/- 2 - super step from g x
+/- 2 - super step to y
![Page 19: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/19.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 19
Box calculus + costs
(x,y) -> (f x,g y)
x -> f x y -> g y
horizontal split/join
no additional cost
![Page 20: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/20.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 20
Box calculus + costs
x -> x x -> x
(x,y) -> x x -> (x,y)
input introduction/elimination output introduction/elimination
+/- cost patt y
+/- 2 - super step to y
+/- cost exp y
+/- 2 - super step from y
![Page 21: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/21.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 2121
Costulator
Rule COSTFile Code
![Page 22: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/22.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 2222
Costulator
Rule COSTFile Code
![Page 23: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/23.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 23
IdentitySplit box >Join box >Add inAdd out...
23
Costulator
Rule COSTFile name?initially: 0space: link: 2 pattern: 0cost: 4
x -> xname?
Code
![Page 24: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/24.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 2424
Costulator
Rule COSTFile incinitially: 0space: link: 2 pattern: 0cost: 4
x -> xinc
Code
![Page 25: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/25.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 25
IdentitySplit box >Join box >Add inAdd out...
25
Costulator
Rule COSTFile incinitially: 0space: link: 3 pattern: 0cost: 6
x -> (x,y)inc
Code
![Page 26: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/26.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 2626
Costulator
Rule COSTFile incinitially: 0space: link: 3 pattern: 0cost: 6
x -> (x,y)inc
Code
![Page 27: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/27.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 2727
Costulator
Rule COSTFile incinitially: 0space: link: 3 pattern: 0cost: 6
x -> (x,y)inc
Code
![Page 28: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/28.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 2828
Costulator
Rule COSTFile incinitially: 0space: link: 3 pattern: 0cost: 6
x -> (x,y)inc
Code
![Page 29: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/29.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 2929
Costulator
Rule COSTFile incinitially: 0space: link: 3 pattern: 0cost: 6
x -> (x,y)inc
Code
![Page 30: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/30.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 3030
Costulator
Rule COSTFile incinitially: 0space: link: 3 pattern: 0cost: 6
x -> (x,x)inc
Code
![Page 31: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/31.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 3131
Costulator
Rule COSTFile incinitially: 0space: link: 3 pattern: 0cost: 9
x -> (x+1,x)inc
Code
![Page 32: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/32.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 3232
Costulator
Rule COSTFile incinitially: 0space: link: 3 pattern: 0cost: 9
x -> (x+1,x)inc
Code
name: ?initially: ?
![Page 33: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/33.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 3333
Costulator
Rule COSTFile incinitially: 2space: link: 3 pattern: 0cost: 9
x -> (x+1,x)inc
Code
name: ninitially: 0
![Page 34: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/34.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 3434
Costulator
Rule COSTFile incinitially: 2space: link: 3 pattern: 0cost: 9
x -> (x+1,x)inc
Code
n
0
...
![Page 35: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/35.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 3535
Costulator
Rule COSTFile incinitially: 2space: link: 3 pattern: 0cost: 9
x -> (x+1,x)inc
0
Code
n
n’ r
![Page 36: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/36.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 3636
Costulator
Rule COSTFile incinitially: 2space: link: 3 pattern: 0cost: 9
x -> (x+1,x)inc
0
Code
n
n’ r
Show
Compile
Run
![Page 37: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/37.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 3737
Costulator
Rule COSTFile incinitially: 2space: link: 3 pattern: 0cost: 9
x -> (x+1,x)inc
0
Code
n
n’ rbox incin (n)out (n’,r)match( x) -> (x+1,x);wire inc (inc.n’ initially 0)(inc.n);
X
![Page 38: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/38.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 3838
X by construction
• syntax directed editing– also visual editing– editor obliges user to only follow grammar
rules in constructing/changing program
• correctness by construction– theorem prover obliges user to only apply
correctness preserving rules to composing correct constructs
– e.g. Martin-Löf type theory
![Page 39: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/39.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 3939
X by construction
• too restrictive
• typically can’t make bad moves to get to a good state
• bad constructs are:– ungrammatical (syntax)– incorrect (correctness)
![Page 40: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/40.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 4040
X by construction
• costing isn’t like that!
• everything has a cost, even “wrong” bits of program– cost is 0– cost is a variable
• maybe not the cost you want though so need cost monitoring
![Page 41: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/41.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 4141
Conclusion
• Costing by construction:– lets you watch how your programming affects
costs as the program develops– does not oblige you to form
grammatical/correct/well costed constructs as you go along
– might cleanly augment an IDE
![Page 42: 2nd March 2010IFIP WG 2.11 St Andrews1 Costing by construction Greg Michaelson School of Mathematical & Computer Sciences Heriot-Watt University](https://reader036.vdocuments.net/reader036/viewer/2022070418/5697bf831a28abf838c862b5/html5/thumbnails/42.jpg)
2nd March 2010 IFIP WG 2.11 St Andrews 42
Conclusion
• mini-Hume compiler + stack machine + cost analysis all written in Standard ML
• Costulator longer term project...
• thanks to:– Kevin Hammond: Hume + costs – Gudmund Grov: Box calculus