tag-elimination and jones optimality walid taha (yale) henning makholm (diku) john hughes (chalmers)

21
Tag-Elimination and Jones Optimality Walid Taha (Yale) Henning Makholm (DIKU) John Hughes (Chalmers)

Post on 22-Dec-2015

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tag-Elimination and Jones Optimality Walid Taha (Yale) Henning Makholm (DIKU) John Hughes (Chalmers)

Tag-Elimination and Jones Optimality

Walid Taha (Yale)

Henning Makholm (DIKU)

John Hughes (Chalmers)

Page 2: Tag-Elimination and Jones Optimality Walid Taha (Yale) Henning Makholm (DIKU) John Hughes (Chalmers)

Compiling by Specialising Interpreters

The Mix Equation

(mix prog data) data’ = prog data data’

The First Futamura Projection

(mix interp prog) data = interp prog data

Optimal Specialisation

mix self_interp prog = prog

Page 3: Tag-Elimination and Jones Optimality Walid Taha (Yale) Henning Makholm (DIKU) John Hughes (Chalmers)

Compiling by Specialising Interpreters

The Mix Equation

(mix prog data) data’ = prog data data’

The First Futamura Projection

(mix interp prog) data = interp prog data

Optimal Specialisation

mix self_interp prog = prog

Typed

interp : Prog -> Val -> Val

Val -> Val

Page 4: Tag-Elimination and Jones Optimality Walid Taha (Yale) Henning Makholm (DIKU) John Hughes (Chalmers)

Compiling by Specialising Interpreters

The Mix Equation

(mix prog data) data’ = prog data data’

The First Futamura Projection

(mix interp prog) data = interp prog data

Optimal Specialisation

mix self_interp prog = prog

Typed

interp : Prog -> Val -> Val

Val -> Val

Page 5: Tag-Elimination and Jones Optimality Walid Taha (Yale) Henning Makholm (DIKU) John Hughes (Chalmers)

The Tagging Problem

data Val = N Int | F (Val -> Val)

eval (Const n) env = N neval (Lam x e) env = F (v. eval e (bind x v env))eval (App e e’) env = unF (eval e env) (eval e’ env)

f.x.f (f x)

mix

F (f. F (x. unF f (unF f x))) Unwanted

tags -- cost 2x

Page 6: Tag-Elimination and Jones Optimality Walid Taha (Yale) Henning Makholm (DIKU) John Hughes (Chalmers)

This Paper: Recovering Optimality

Optimal Specialisation

tagElim (mix self_interp prog) (typeOf prog) = prog

Val -> Val

Eliminates tags,converts to type of

prog.

Page 7: Tag-Elimination and Jones Optimality Walid Taha (Yale) Henning Makholm (DIKU) John Hughes (Chalmers)

Haven’t we heard this before?Type specialisation (Hughes)

•specialised an interpreter for -calculus to terms without tags -- but not a self-interpreter!

•large step away from partial evaluation.

Tag elimination (Taha)

•eliminated tags (provably), but for a tiny language -- no self-interpreter!

Optimal typed specialisation (Makholm)

•first-order language, complex -- many stages

•experimentally optimal, but no proof!

Page 8: Tag-Elimination and Jones Optimality Walid Taha (Yale) Henning Makholm (DIKU) John Hughes (Chalmers)

This Paper

•Higher-order language: -calculus with data types.

•A complete self-interpreter.

•Standard partial evaluation, followed by a simple tag-elimination post-processor.

•Provably optimal specialisation.

•Implementation matching the theory.

Page 9: Tag-Elimination and Jones Optimality Walid Taha (Yale) Henning Makholm (DIKU) John Hughes (Chalmers)

The Language

::= D | V | ->

S-expressiondata

Values in interpreted programsdata V = E D | F (V -> V)

s ::= x | (s.s) u ::= car | cdr | atom? o ::= cons | equal?

e ::= x | e e | x.e | fix x.e | `s | u e | o e e | if e e e |

E e | unE e | F e | unF e

No caseexpression!

Page 10: Tag-Elimination and Jones Optimality Walid Taha (Yale) Henning Makholm (DIKU) John Hughes (Chalmers)

The Self-Interpreter

fix eval. env. e.

(if (equal? (car e) `quote) (E (car (cdr e))) …

(if (equal? (car e) `E) (E (unE (eval env (car (cdr e)))))

V D

VRun-time type check

e and E e evaluate to the same representation!OK, since they have different types.

Page 11: Tag-Elimination and Jones Optimality Walid Taha (Yale) Henning Makholm (DIKU) John Hughes (Chalmers)

Tag-Elimination Annotations

Each tag/untag operation is annotated

•k (keep), or

•e (eliminate)

|Ee e| = E |e||Ek e| = E |e|

|unEe e| = unE |e||unEk e| = unE |e|

Erasure

||Ee e|| = ||e||||Ek e|| = E ||e||||unEe e|| = ||e||

||unEk e|| = unE ||e||…

Tag Elimination

Page 12: Tag-Elimination and Jones Optimality Walid Taha (Yale) Henning Makholm (DIKU) John Hughes (Chalmers)

Annotating the Self-Interpreter

fix eval. env. e.

(if (equal? (car e) `quote) (Ee (car (cdr e))) …

(if (equal? (car e) `E) (Ek (unEe (eval env (car (cdr e)))))

eval env `(E (quote x)) Ek (unEe (Ee `x))mix

E `x

|| _ ||

Page 13: Tag-Elimination and Jones Optimality Walid Taha (Yale) Henning Makholm (DIKU) John Hughes (Chalmers)

The Analysis

How do we know ||e|| is well typed?

|| _ || changes types!

E.g. || unFe (Ee `x) (Ee `y) || `x `y

Page 14: Tag-Elimination and Jones Optimality Walid Taha (Yale) Henning Makholm (DIKU) John Hughes (Chalmers)

The Analysis

How do we know ||e|| is well typed?

|| _ || changes types!

E.g. || unFe (Ee `x) (Ee `y) || `x `y

Richer“Annotated”type system

E D

F a -> a

|| unFk (Ek `x) (Ek `y) || unF (E `x) (E `y)V

V -> (V -> V)

Page 15: Tag-Elimination and Jones Optimality Walid Taha (Yale) Henning Makholm (DIKU) John Hughes (Chalmers)

Annotated Types

c ::= V | E D | F (c -> c) can be produced by ||_||a term of type V

a ::= D | c | a -> a can be produced by ||_||

|c| = V|D| = D

|a -> a´| = |a| -> |a´|

||V|| = V||E D|| = D

||F (c -> c´)|| = ||c|| -> ||c´||||D|| = D

||a -> a´|| = ||a|| -> ||a´||

Page 16: Tag-Elimination and Jones Optimality Walid Taha (Yale) Henning Makholm (DIKU) John Hughes (Chalmers)

Roadmap

self_interp

prog

Well-typed, but not well-annotated.

+

mix self_interp prog Well-typed, but perhaps not well-annotated.

Analysissucceeds?

tagElim (mix …) Well-typed, = prog.

Some sensible default.

Page 17: Tag-Elimination and Jones Optimality Walid Taha (Yale) Henning Makholm (DIKU) John Hughes (Chalmers)

Wrapping and Unwrapping

W<D> x = xW<V> x = x

W<E D> x = E xW<F a> f = F (W<a> f)

W<a->a´> f = x. W<a´> (f (U<a> x))

W<a> :: ||a|| -> |a|

U<D> x = xU<V> x = x

U<E D> x = unE xU<F a> f = U<a> (unF f)

U<a->a´> f = x. U<a´> (f (W<a> x))

U<a> :: |a| -> ||a||

Page 18: Tag-Elimination and Jones Optimality Walid Taha (Yale) Henning Makholm (DIKU) John Hughes (Chalmers)

Correctness of Tag Elimination

Now we can define the tag elimination transformation:

||e|| if e : atagElim e a =

U<a> |e| otherwise

Correctness

|e| : |a|. tagElim e a U<a> |e|

Page 19: Tag-Elimination and Jones Optimality Walid Taha (Yale) Henning Makholm (DIKU) John Hughes (Chalmers)

Mix Self_interp: A Closer Look

mix self_interp performs a simple syntax-directed translation:

(x. e) = Fe (x. e) (E e) = Ek (unEe (e))

(e e´) = unFe (e) (e´) (unE e) = Ee (unEk (e))

Extends to a translation of types:

D = E D

V = V

(->´) = F (->)

e : e :

Page 20: Tag-Elimination and Jones Optimality Walid Taha (Yale) Henning Makholm (DIKU) John Hughes (Chalmers)

Typed Partial Evaluation and Optimality

The Typed Mix Equation

e e´ : |a| tmix e e´ a U<a> (e e’)

Optimal Typed Specialisation

e : tmix self_interp e () e

Satisfied by: tmix e e´ a = tagElim (mix e e´) a

Page 21: Tag-Elimination and Jones Optimality Walid Taha (Yale) Henning Makholm (DIKU) John Hughes (Chalmers)

Conclusions

•The mix equation and Jones-optimality reformulated to make them consistent in a typed setting.

•Tag elimination is a simple post-processor which achieves optimality in theory and in practice, for a fairly rich language, building on existing PE technology.

•Future work:•Polymorphism?•User-defined datatypes?•Dynamic tag tests?