efficient online partial evaluationsumii/pub/gpc.pdfefficient online partial evaluation eijiro sumii...

118
Efficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp)

Upload: others

Post on 27-Mar-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Efficient Online Partial EvaluationEijiro Sumii

Naoki KobayashiUniversity of Tokyo

({sumii,koba}@yl.is.s.u-tokyo.ac.jp)

Page 2: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Partial Evaluation

source program p(s,d)+

static input s´

Page 3: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Partial Evaluation

source program p(s,d)+

static input s´

Reduce/residualize static/dynamicportions of p(s´,d)

Page 4: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Partial Evaluation

source program p(s,d)+

static input s´

Reduce/residualize static/dynamicportions of p(s´,d)

↓specialized program ps´(d)

Page 5: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Partial Evaluation

source program p(s,d)+

static input s´

Reduce/residualize static/dynamicportions of p(s´,d)

↓specialized program ps´(d) s.t.

p(s´,d) = ps´(d) for any dynamic input d(Hopefully, the r.h.s. is faster)

Page 6: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Online PE and Offline PE

When to decide "static or dynamic"?

Page 7: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Online PE and Offline PE

When to decide "static or dynamic"?– During specialization, with static input

⇒ Online PE

Page 8: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Online PE and Offline PE

When to decide "static or dynamic"?– During specialization, with static input

⇒ Online PE– Before specialization, without static

input⇒ Offline PE

Page 9: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Merits and Demerits of Online PE and Offline PE

• Online PE is– more precise, but...

Page 10: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Merits and Demerits of Online PE and Offline PE

• Online PE is– more precise, but– less efficient

• Takes 10-100 times as much PE time

Page 11: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Merits and Demerits of Online PE and Offline PE

• Online PE is– more precise, but– less efficient

• Takes 10-100 times as much PE time

• Offline PE is– more efficient, but...

Page 12: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Merits and Demerits of Online PE and Offline PE

• Online PE is– more precise, but– less efficient

• Takes 10-100 times as much PE time

• Offline PE is– more efficient, but– less precise

• Requires more binding-time improvment

Page 13: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Our Goal and Approach

Combine– the precision of online PE, and– the efficiency of offline PE

by– going back to a naive online partial

evaluator, and– optimizing it without losing its precision

• State-based let-insertion• Cogen approach to online PE• Type-based use analysis

Page 14: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Overview

• Introduction• Related work• A naive online partial evaluator• Our optimizations

– State-based let-insertion– Cogen approach to online PE– Type-based use analysis

• Experiments• Conclusion

Page 15: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Overview

• Introduction• Related work• A naive online partial evaluator• Our optimizations

– State-based let-insertion– Cogen approach to online PE– Type-based use analysis

• Experiments• Conclusion

Page 16: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Related Work (I)

To reduce interpretive overheads• Self-application in online PE

[Ruf-93, Sperber-96, etc.]⇒ Cogen approach is simpler and faster

Page 17: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Related Work (I)

To reduce interpretive overheads• Self-application in online PE

[Ruf-93, Sperber-96, etc.]⇒ Cogen approach is simpler and faster

• Cogen approach to offline PE[Thiemann-96, etc.]⇒ We adopted it into online PE

Page 18: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Related Work (II)

To reduce unnecessary computations• (Monovariant) BTA's

– for offline PE [Henglein-91, Asai-99, etc.]– for online PE [Ruf-93, Sperber-96]

Page 19: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Related Work (II)

To reduce unnecessary computations• (Monovariant) BTA's

– for offline PE [Henglein-91, Asai-99, etc.]– for online PE [Ruf-93, Sperber-96]

• Abstract occurrence counting analysis [Bondorf-90]

⇒ Our analysis subsumes all of these in a single framework

Page 20: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Overview

• Introduction• Related work• A naive online partial evaluator• Our optimizations

– State-based let-insertion– Cogen approach to online PE– Type-based use analysis

• Experiments• Conclusion

Page 21: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

A Naive Online Partial Evaluator

E (expression) ::= x | λx.E | E@E

Page 22: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

A Naive Online Partial Evaluator

E (expression) ::= x | λx.E | E@Eonpe : exp → env → value option × exp

(symbolic value)

Page 23: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

A Naive Online Partial Evaluator

E (expression) ::= x | λx.E | E@Eonpe : exp → env → value option × exp

(symbolic value)onpe(x)ρ = ρ(x)

Page 24: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

A Naive Online Partial Evaluator

E (expression) ::= x | λx.E | E@Eonpe : exp → env → value option × exp

(symbolic value)onpe(x)ρ = ρ(x)onpe(λx.E)ρ = ⟨Some(λv.onpe(E)ρ[x:=v]),

…⟩

Page 25: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

A Naive Online Partial Evaluator

E (expression) ::= x | λx.E | E@Eonpe : exp → env → value option × exp

(symbolic value)onpe(x)ρ = ρ(x)onpe(λx.E)ρ = ⟨Some(λv.onpe(E)ρ[x:=v]),

λx◊.#2(onpe(E)ρ[x:=⟨None, x◊⟩])⟩

Page 26: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

A Naive Online Partial Evaluator

E (expression) ::= x | λx.E | E@Eonpe : exp → env → value option × exp

(symbolic value)onpe(x)ρ = ρ(x)onpe(λx.E)ρ = ⟨Some(λv.onpe(E)ρ[x:=v]),

λx◊.#2(onpe(E)ρ[x:=⟨None, x◊⟩])⟩onpe(E1@E2)ρ = let a = onpe(E2)ρ in …

Page 27: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

A Naive Online Partial Evaluator

E (expression) ::= x | λx.E | E@Eonpe : exp → env → value option × exp

(symbolic value)onpe(x)ρ = ρ(x)onpe(λx.E)ρ = ⟨Some(λv.onpe(E)ρ[x:=v]),

λx◊.#2(onpe(E)ρ[x:=⟨None, x◊⟩])⟩onpe(E1@E2)ρ = let a = onpe(E2)ρ in

case onpe(E1)ρ of …

Page 28: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

A Naive Online Partial Evaluator

E (expression) ::= x | λx.E | E@Eonpe : exp → env → value option × exp

(symbolic value)onpe(x)ρ = ρ(x)onpe(λx.E)ρ = ⟨Some(λv.onpe(E)ρ[x:=v]),

λx◊.#2(onpe(E)ρ[x:=⟨None, x◊⟩])⟩onpe(E1@E2)ρ = let a = onpe(E2)ρ in

case onpe(E1)ρ of ⟨Some(v), _⟩ ⇒ v a | …

Page 29: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

A Naive Online Partial Evaluator

E (expression) ::= x | λx.E | E@Eonpe : exp → env → value option × exp

(symbolic value)onpe(x)ρ = ρ(x)onpe(λx.E)ρ = ⟨Some(λv.onpe(E)ρ[x:=v]),

λx◊.#2(onpe(E)ρ[x:=⟨None, x◊⟩])⟩onpe(E1@E2)ρ = let a = onpe(E2)ρ in

case onpe(E1)ρ of ⟨Some(v), _⟩ ⇒ v a| ⟨None, e⟩ ⇒ ⟨None, e@#2(a)⟩

Page 30: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Examples

• λx.(λy.y)x → λx.x

Page 31: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Examples

• λx.(λy.y)x → λx.x#2(onpe(λx.(λy.y)@x)[ ])

Page 32: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Examples

• λx.(λy.y)x → λx.x#2(onpe(λx.(λy.y)@x)[ ])

→ #2⟨…, λx◊.#2(onpe((λy.y)@x)[x:=⟨None, x◊⟩])⟩

Page 33: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Examples

• λx.(λy.y)x → λx.x#2(onpe(λx.(λy.y)@x)[ ])

→ #2⟨…, λx◊.#2(onpe((λy.y)@x)[x:=⟨None, x◊⟩])⟩→ #2⟨…, λx◊.#2(let a = onpe(x)[x:=⟨None, x◊⟩] in …)⟩

Page 34: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Examples

• λx.(λy.y)x → λx.x#2(onpe(λx.(λy.y)@x)[ ])

→ #2⟨…, λx◊.#2(onpe((λy.y)@x)[x:=⟨None, x◊⟩])⟩→ #2⟨…, λx◊.#2(let a = onpe(x)[x:=⟨None, x◊⟩] in …)⟩→ #2⟨…, λx◊.#2(let a = ⟨None, x◊⟩ in …)⟩

Page 35: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Examples

• λx.(λy.y)x → λx.x#2(onpe(λx.(λy.y)@x)[ ])

→ #2⟨…, λx◊.#2(onpe((λy.y)@x)[x:=⟨None, x◊⟩])⟩→ #2⟨…, λx◊.#2(let a = onpe(x)[x:=⟨None, x◊⟩] in …)⟩→ #2⟨…, λx◊.#2(let a = ⟨None, x◊⟩ in …)⟩→ #2⟨…, λx◊.#2(let a = ⟨None, x◊⟩ in

case onpe(λy.y)[…]of …)⟩

Page 36: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Examples

• λx.(λy.y)x → λx.x#2(onpe(λx.(λy.y)@x)[ ])

→ #2⟨…, λx◊.#2(onpe((λy.y)@x)[x:=⟨None, x◊⟩])⟩→ #2⟨…, λx◊.#2(let a = onpe(x)[x:=⟨None, x◊⟩] in …)⟩→ #2⟨…, λx◊.#2(let a = ⟨None, x◊⟩ in …)⟩→ #2⟨…, λx◊.#2(let a = ⟨None, x◊⟩ in

case onpe(λy.y)[…]of …)⟩

→ #2⟨…, λx◊.#2(let a = ⟨None, x◊⟩ incase ⟨Some(λv.onpe(y)[…, y:=v]), …⟩of …)⟩

Page 37: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Examples

• λx.(λy.y)x → λx.x#2(onpe(λx.(λy.y)@x)[ ])

→ …→ #2⟨…, λx◊.#2(let a = ⟨None, x◊⟩ in

case ⟨Some(λv.onpe(y)[…, y:=v]), …⟩of ⟨Some(v), _⟩ ⇒ v a| …)⟩

Page 38: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Examples

• λx.(λy.y)x → λx.x#2(onpe(λx.(λy.y)@x)[ ])

→ …→ #2⟨…, λx◊.#2(let a = ⟨None, x◊⟩ in

case ⟨Some(λv.onpe(y)[…, y:=v]), …⟩of ⟨Some(v), _⟩ ⇒ v a| …)⟩

→ #2⟨…, λx◊.#2((λv.onpe(y)[…, y:=v]) ⟨None, x◊⟩)⟩

Page 39: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Examples

• λx.(λy.y)x → λx.x#2(onpe(λx.(λy.y)@x)[ ])

→ …→ #2⟨…, λx◊.#2(let a = ⟨None, x◊⟩ in

case ⟨Some(λv.onpe(y)[…, y:=v]), …⟩of ⟨Some(v), _⟩ ⇒ v a| …)⟩

→ #2⟨…, λx◊.#2((λv.onpe(y)[…, y:=v]) ⟨None, x◊⟩)⟩→ #2⟨…, λx◊.#2(onpe(y)[…, y:=⟨None, x◊⟩])⟩

Page 40: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Examples

• λx.(λy.y)x → λx.x#2(onpe(λx.(λy.y)@x)[ ])

→ …→ #2⟨…, λx◊.#2(let a = ⟨None, x◊⟩ in

case ⟨Some(λv.onpe(y)[…, y:=v]), …⟩of ⟨Some(v), _⟩ ⇒ v a| …)⟩

→ #2⟨…, λx◊.#2((λv.onpe(y)[…, y:=v]) ⟨None, x◊⟩)⟩→ #2⟨…, λx◊.#2(onpe(y)[…, y:=⟨None, x◊⟩])⟩→ #2⟨…, λx◊.#2(⟨None, x◊⟩)⟩

Page 41: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Examples

• λx.(λy.y)x → λx.x#2(onpe(λx.(λy.y)@x)[ ])

→ …→ #2⟨…, λx◊.#2(let a = ⟨None, x◊⟩ in

case ⟨Some(λv.onpe(y)[…, y:=v]), …⟩of ⟨Some(v), _⟩ ⇒ v a| …)⟩

→ #2⟨…, λx◊.#2((λv.onpe(y)[…, y:=v]) ⟨None, x◊⟩)⟩→ #2⟨…, λx◊.#2(onpe(y)[…, y:=⟨None, x◊⟩])⟩→ #2⟨…, λx◊.#2(⟨None, x◊⟩)⟩→ #2⟨…, λx◊.x◊⟩

Page 42: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Examples

• λx.(λy.y)x → λx.x#2(onpe(λx.(λy.y)@x)[ ])

→ …→ #2⟨…, λx◊.#2(let a = ⟨None, x◊⟩ in

case ⟨Some(λv.onpe(y)[…, y:=v]), …⟩of ⟨Some(v), _⟩ ⇒ v a| …)⟩

→ #2⟨…, λx◊.#2((λv.onpe(y)[…, y:=v]) ⟨None, x◊⟩)⟩→ #2⟨…, λx◊.#2(onpe(y)[…, y:=⟨None, x◊⟩])⟩→ #2⟨…, λx◊.#2(⟨None, x◊⟩)⟩→ #2⟨…, λx◊.x◊⟩→ λx◊.x◊

Page 43: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Examples

• λx.(λy.y)x → λx.x– Reduces expressions inside functions

Page 44: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Examples

• λx.(λy.y)x → λx.x– Reduces expressions inside functions

• let f = λx.1 in ⟨f 2, f⟩ → ⟨1, λx.1⟩– Uses both the static value and the

dynamic expression of fcf. "both" BTA [Asai-99]

Page 45: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Examples

• λx.(λy.y)x → λx.x– Reduces expressions inside functions

• let f = λx.1 in ⟨f 2, f⟩ → ⟨1, λx.1⟩– Uses both the static value and the

dynamic expression of fcf. "both" BTA [Asai-99]

• λx.1+(if true then 2 else x) → λx.3– Doesn't require context duplication

• cf. continuation-based PE [Lawall-Danvy-94]

Page 46: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Let-Insertion is Necessary

• to avoid code duplicationlet f = λx.1+2 in ⟨f, f⟩

→ let f = λx.3 in ⟨f, f⟩rather than ⟨λx.3, λx.3⟩

Page 47: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Let-Insertion is Necessary

• to avoid code duplication• to preserve semantics under side-

effectsλf.1+(let x = f 2 in 3)

→ λf.let x = f 2 in 4rather than λf.4

Page 48: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Continuation-Based Let-Insertion [Lawall-Danvy-94]

Insert let-bindings by manipulating delimited continuations

• Creates a let-insertion point by delimiting a context

delimit-let(e) ≡ reset(e)

Page 49: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Continuation-Based Let-Insertion [Lawall-Danvy-94]

Insert let-bindings by manipulating delimited continuations

• Creates a let-insertion point by delimiting a context

delimit-let(e) ≡ reset(e)• Inserts a let-binding by extracting

the delimited contextadd-let(e) ≡ shift(λk. let x◊ = e in k x◊)

Page 50: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Continuation-Based Let-Insertion in Offline PE

λf.(1+(let x = f@2 in 3))

Page 51: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Continuation-Based Let-Insertion in Offline PE

λf.(1+(let x = f@2 in 3))⇒ λf.delimit-let(1+(let x = add-let(f@2) in 3))

Page 52: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Continuation-Based Let-Insertion in Offline PE

λf.(1+(let x = f@2 in 3))⇒ λf.delimit-let(1+(let x = add-let(f@2) in 3))→ λf.reset(1+(let x =

shift(λk. let x◊ = (f@2) in k x◊) in 3))

Page 53: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Continuation-Based Let-Insertion in Offline PE

λf.(1+(let x = f@2 in 3))⇒ λf.delimit-let(1+(let x = add-let(f@2) in 3))→ λf.reset(1+(let x =

shift(λk. let x◊ = (f@2) in k x◊) in 3))→ λf.let x◊ = (f@2) in (k x◊)

where k[ ] = 1+(let x = [ ] in 3)

Page 54: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Continuation-Based Let-Insertion in Offline PE

λf.(1+(let x = f@2 in 3))⇒ λf.delimit-let(1+(let x = add-let(f@2) in 3))→ λf.reset(1+(let x =

shift(λk. let x◊ = (f@2) in k x◊) in 3))→ λf.let x◊ = (f@2) in (k x◊)

where k[ ] = 1+(let x = [ ] in 3)→ λf.let x◊ = (f@2) in (1+(let x = x◊ in 3))

Page 55: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Continuation-Based Let-Insertion in Offline PE

λf.(1+(let x = f@2 in 3))⇒ λf.delimit-let(1+(let x = add-let(f@2) in 3))→ λf.reset(1+(let x =

shift(λk. let x◊ = (f@2) in k x◊) in 3))→ λf.let x◊ = (f@2) in (k x◊)

where k[ ] = 1+(let x = [ ] in 3)→ λf.let x◊ = (f@2) in (1+(let x = x◊ in 3))→ λf.let x◊ = (f@2) in 4

Page 56: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Continuation-Based Let-Insertion in Online PE

onpe(x)ρ = ρ(x)onpe(λx.E)ρ = ⟨Some(λv.onpe(E)ρ[x:=v]),

add-let(λx◊.delimit-let(#2(onpe(E)ρ[x:=⟨None, x◊⟩])))⟩

onpe(E1@E2)ρ = let a = onpe(E2)ρ incase onpe(E1)ρ of ⟨Some(v), _⟩ ⇒ v a

| ⟨None, e⟩ ⇒ ⟨None, add-let(e@#2(a))⟩

Page 57: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Continuation-Based Let-Insertion in Online PE

onpe(x)ρ = ρ(x)onpe(λx.E)ρ = ⟨Some(λv.onpe(E)ρ[x:=v]),

add-let(λx◊.delimit-let(#2(onpe(E)ρ[x:=⟨None, x◊⟩])))⟩

onpe(E1@E2)ρ = let a = onpe(E2)ρ incase onpe(E1)ρ of ⟨Some(v), _⟩ ⇒ v a

| ⟨None, e⟩ ⇒ ⟨None, add-let(e@#2(a))⟩

Page 58: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Problems of the Naive Online Partial Evaluator

Correct but inefficient, because of• shift/reset for let-insertion

Page 59: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Problems of the Naive Online Partial Evaluator

Correct but inefficient, because of• shift/reset for let-insertion• interpretive overheads

– environment manipulation– syntax dispatch– universal domain (in typed languages)

Page 60: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Problems of the Naive Online Partial Evaluator

Correct but inefficient, because of• shift/reset for let-insertion• interpretive overheads

– environment manipulation– syntax dispatch– universal domain (in typed languages)

• unnecessary computations– unnecessary let-insertions– unnecessary Some/None tags– unused values/expressions

Page 61: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Overview

• Introduction• Related work• A naive online partial evaluator• Our optimizations

– State-based let-insertion– Cogen approach to online PE– Type-based use analysis

• Experiments• Conclusion

Page 62: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Problems of the Naive Online Partial Evaluator

Correct but inefficient, because of• shift/reset for let-insertion• interpretive overheads

– environment manipulation– syntax dispatch– universal domain (in typed languages)

• unnecessary computations– unnecessary let-insertions– unnecessary Some/None tags– unused values/expressions

Page 63: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

State-Based Let-Insertion

context := λe.e

Page 64: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

State-Based Let-Insertion

context := λe.eadd-let(e) ≡

(context := !context o λx.let z◊ = e in x; z◊)

Page 65: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

State-Based Let-Insertion

context := λe.eadd-let(e) ≡

(context := !context o λx.let z◊ = e in x; z◊)delimit-let(e) ≡

let tmp = !context in …

Page 66: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

State-Based Let-Insertion

context := λe.eadd-let(e) ≡

(context := !context o λx.let z◊ = e in x; z◊)delimit-let(e) ≡

let tmp = !context in(context := λe.e; …

Page 67: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

State-Based Let-Insertion

context := λe.eadd-let(e) ≡

(context := !context o λx.let z◊ = e in x; z◊)delimit-let(e) ≡

let tmp = !context in(context := λe.e;let body = e in …

Page 68: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

State-Based Let-Insertion

context := λe.eadd-let(e) ≡

(context := !context o λx.let z◊ = e in x; z◊)delimit-let(e) ≡

let tmp = !context in(context := λe.e;let body = e inlet head = !context in …

Page 69: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

State-Based Let-Insertion

context := λe.eadd-let(e) ≡

(context := !context o λx.let z◊ = e in x; z◊)delimit-let(e) ≡

let tmp = !context in(context := λe.e;let body = e inlet head = !context in(context := tmp; …

Page 70: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

State-Based Let-Insertion

context := λe.eadd-let(e) ≡

(context := !context o λx.let z◊ = e in x; z◊)delimit-let(e) ≡

let tmp = !context in(context := λe.e;let body = e inlet head = !context in(context := tmp;head body))

Page 71: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Overview

• Introduction• Related work• A naive online partial evaluator• Our optimizations

– State-based let-insertion– Cogen approach to online PE– Type-based use analysis

• Experiments• Conclusion

Page 72: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Problems of the Naive Online Partial Evaluator

Correct but inefficient, because of• shift/reset for let-insertion• interpretive overheads

– environment manipulation– syntax dispatch– universal domain (in typed languages)

• unnecessary computations– unnecessary let-insertions– unnecessary Some/None tags– unused values/expressions

Page 73: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Interpretive Approach

source program p(s,d)+

static input s´

Partially-evaluate p(s´,d)with an interpreter

↓specialized program ps´(d)

Page 74: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Cogen Approach

source program p(s,d)

Page 75: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Cogen Approach

source program p(s,d)↓

generating extension cogenp(s)

Page 76: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Cogen Approach

source program p(s,d)↓

generating extension cogenp(s)+

static input s´

Page 77: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Cogen Approach

source program p(s,d)↓

generating extension cogenp(s)+

static input s´

Execute cogenp(s´) directlywithout an interpreter

Page 78: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Cogen Approach

source program p(s,d)↓

generating extension cogenp(s)+

static input s´

Execute cogenp(s´) directlywithout an interpreter

↓specialized program ps´(d)

Page 79: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Offline-PE Combinators[Thiemann-96]

From an interpretive partial evaluator, derive a cogen

Page 80: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Offline-PE Combinators[Thiemann-96]

From an interpretive partial evaluator, derive a cogen using

• Higher-order abstract syntax [Pfenning-Elliott-88]– Substitute object-level bindings with

meta-level bindings

Page 81: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Offline-PE Combinators[Thiemann-96]

From an interpretive partial evaluator, derive a cogen using

• Higher-order abstract syntax [Pfenning-Elliott-88]– Substitute object-level bindings with

meta-level bindings• Deforestation

– Compose the syntax constructors with the partial evaluator

Page 82: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Online-PE Combinators

Define abs and app s.t.onpe(λx.E)ρ ≈ abs(λx.E′) under ρ′onpe(E1@E2)ρ ≈ app(E1′, E2′) under ρ′

Page 83: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Online-PE Combinators

Define abs and app s.t.onpe(λx.E)ρ ≈ abs(λx.E′) under ρ′onpe(E1@E2)ρ ≈ app(E1′, E2′) under ρ′

e.g.,onpe(λx.(λy.y)@x)[ ]≈ abs(λx.app(abs(λy.y),x))= ⟨…, λx◊.x◊⟩

Page 84: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Online-PE Combinators

Define abs and app s.t.onpe(λx.E)ρ ≈ abs(λx.E′) under ρ′onpe(E1@E2)ρ ≈ app(E1′, E2′) under ρ′

e.g.,onpe(λx.(λy.y)@x)[ ]≈ abs(λx.app(abs(λy.y),x))= ⟨…, λx◊.x◊⟩

abs(f) = ⟨Some(λv.f v), λx◊.#2(f ⟨None, x◊⟩]))⟩app(p, a) = case p of ⟨Some(v), _⟩ ⇒ v a

| ⟨None, e⟩ ⇒ ⟨None, e@#2(a)⟩

Page 85: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Overview

• Introduction• Related work• A naive online partial evaluator• Our optimizations

– State-based let-insertion– Cogen approach to online PE– Type-based use analysis

• Experiments• Conclusion

Page 86: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Problems of the Naive Online Partial Evaluator

Correct but inefficient, because of• shift/reset for let-insertion• interpretive overheads

– environment manipulation– syntax dispatch– universal domain (in typed languages)

• unnecessary computations– unnecessary let-insertions– unnecessary Some/None tags– unused values/expressions

Page 87: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Unnecessary Computations in Online PE

• Unused valuese.g., in λx.1+2 → λx.3,

abs(λx.…)= ⟨Some(λx.…), λx◊.…⟩

can be simplified to⟨( ), λx◊.…⟩

Page 88: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Unnecessary Computations in Online PE

• Unused values• Unnecessary tags & unused expressions

e.g., in (λx.x)a → a,app(abs(λx.x),a)= case abs(λx.x)

of ⟨Some(v), _⟩ ⇒ v a | ⟨None, …⟩ ⇒ …= case ⟨Some(λx.x), λx◊.…⟩

of ⟨Some(v), _⟩ ⇒ v a | ⟨None, …⟩ ⇒ …can be simplified to

case ⟨λx.x, ( )⟩ of ⟨v, _⟩ ⇒ v a= let v = λx.x in v a

Page 89: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Unnecessary Computations in Online PE

• Unused values• Unnecessary tags & unused expressions• Unnecessary let-insertions

An expression requires no let-insertion– if it has no side-effects, and– if it appears at most once

in the specialized program

Page 90: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Type-Based Use Analysis

Count the uses of values/expressionsρ (raw type) ::= α | τ → τ | τ × ττ (annotated type) ::= ρ(s,d)

Page 91: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Type-Based Use Analysis

Count the uses of values/expressionsρ (raw type) ::= α | τ → τ | τ × ττ (type) ::= ρ(s,d)

s (static use) ::= 0 (never) | ω (always) |T (sometimes)– Whether a static value is available or not

Page 92: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Type-Based Use Analysis

Count the uses of values/expressionsρ (raw type) ::= α | τ → τ | τ × ττ (type) ::= ρ(s,d)

s (static use) ::= 0 (never) | ω (always) |T (sometimes)– Whether a static value is available or not

d (dynamic use) ::= 0 (never) |1 (at most once) | ω (any number of times)– How many times a dynamic expression

appears in the specialized program

Page 93: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Examples

• let f = λx.x in f 3

Page 94: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Examples

• let f : int →(ω,0) int = λx.x in f 3⇒ 3

Page 95: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Examples

• let f : int →(ω,0) int = λx.x in f 3⇒ 3

• let f = λx.x in f

Page 96: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Examples

• let f : int →(ω,0) int = λx.x in f 3⇒ 3

• let f : int →(0,1) int = λx.x in f⇒ λx.x

Page 97: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Examples

• let f : int →(ω,0) int = λx.x in f 3⇒ 3

• let f : int →(0,1) int = λx.x in f⇒ λx.x

• let f = λx.x in ⟨f 3, f⟩

Page 98: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Examples

• let f : int →(ω,0) int = λx.x in f 3⇒ 3

• let f : int →(0,1) int = λx.x in f⇒ λx.x

• let f : int →(ω,1) int = λx.x in ⟨f 3, f⟩⇒ ⟨3, λx.x⟩

Page 99: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Examples

• let f : int →(ω,0) int = λx.x in f 3⇒ 3

• let f : int →(0,1) int = λx.x in f⇒ λx.x

• let f : int →(ω,1) int = λx.x in ⟨f 3, f⟩⇒ ⟨3, λx.x⟩

• let f = λx.x in ⟨f 3, f, f⟩

Page 100: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Examples

• let f : int →(ω,0) int = λx.x in f 3⇒ 3

• let f : int →(0,1) int = λx.x in f⇒ λx.x

• let f : int →(ω,1) int = λx.x in ⟨f 3, f⟩⇒ ⟨3, λx.x⟩

• let f : int →(ω,ω) int = λx.x in ⟨f 3, f, f⟩⇒ let f = λx.x in ⟨3, f, f⟩

Page 101: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

More Examples

• let f = λx.x inlet g = λy.f ing

Page 102: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

More Examples

• let f : α →(0,1) α = λx.x inlet g : β →(0,1) α →(0,1) α = λy.f ing⇒ λy.λx.x

Page 103: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

More Examples

• let f : α →(0,1) α = λx.x inlet g : β →(0,1) α →(0,1) α = λy.f ing⇒ λy.λx.x

• let f = λx.x inlet g = λy.f in⟨g 1, g 2⟩

Page 104: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

More Examples

• let f : α →(0,1) α = λx.x inlet g : β →(0,1) α →(0,1) α = λy.f ing⇒ λy.λx.x

• let f : α →(0,ω) α = λx.x inlet g : β →(ω,0) α →(0,1) α = λy.f in⟨g 1, g 2⟩⇒ let f = λx.x in ⟨f, f⟩

Page 105: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Typing Rule

Example: λ-abstractionΓ ? (s,d) · Γ0

d ≠ 0 ⇒ s1 ≠ ωΓ0, x : ρ1

(s1,d1)├ e : τ2

Γ├ λx.e : ρ1

(s1,d1) →(s,d) τ2

Page 106: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Typing Rule

Example: λ-abstractionΓ ? (s,d) · Γ0

d ≠ 0 ⇒ s1 ≠ ωΓ0, x : ρ1

(s1,d1)├ e : τ2

Γ├ λx.e : ρ1

(s1,d1) →(s,d) τ2

Page 107: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Typing Rule

Example: λ-abstractionΓ ? (s,d) · Γ0

d ≠ 0 ⇒ s1 ≠ ωΓ0, x : ρ1

(s1,d1)├ e : τ2

Γ├ λx.e : ρ1

(s1,d1) →(s,d) τ2

Page 108: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Type Inference

• Construct the type derivation– assigning variables for uses, and– generating constraints for the variables

Page 109: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Type Inference

• Construct the type derivation– assigning variables for uses, and– generating constraints for the variables

• Solve the constraints– beginning with the most conservative

approximation (s = T and d = ω for all sand d), and

– refining it with iterations (linear w.r.t. the number of use variables)

Page 110: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Overview

• Introduction• Related work• A naive online partial evaluator• Our optimizations

– State-based let-insertion– Cogen approach to online PE– Type-based use analysis

• Experiments• Conclusion

Page 111: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Conditions

• Mobile Pentium II 400MHz• 128MB Main Memory• Debian/Linux 2.2.10• SML/NJ 110.0.3

Page 112: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Applications

• impAn interpreter for a simple imperative

language• match1

A pattern matcher with the pattern static• match2

The same pattern matcher with the string static

• power

Page 113: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Effects of Optimizations:Time for Partial Evaluators

00.10.20.30.40.50.60.70.80.9

1

imp match1 match2 power

naive(=1)+state+cogen+analysis

Page 114: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Comparison of BTA's:Time for Generating Extensions

00.10.20.30.40.50.60.70.80.9

1

imp match1 match2 power

Henglein's BTAafter BTI byhandSperber's BTA(=1)

our type-baseduse analysis

Page 115: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Comparison of BTA's:Time for Specialized Programs

00.10.20.30.40.50.60.70.80.9

1

imp match1 match2 power

no PE (=1)

Henglein's BTAafter BTI byhandSperber's BTA

our type-baseduse analysis

Page 116: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Conclusion

• We presented "hybrid" PE that combines– the precision of online PE, and– the efficiency of offline PE

Page 117: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Conclusion

• We presented "hybrid" PE that combines– the precision of online PE, and– the efficiency of offline PE

• Our future work includes– correctness proof– termination guarantee

Page 118: Efficient Online Partial Evaluationsumii/pub/GPC.pdfEfficient Online Partial Evaluation Eijiro Sumii Naoki Kobayashi University of Tokyo ({sumii,koba}@yl.is.s.u-tokyo.ac.jp) ... –

Conclusion

• We presented "hybrid" PE that combines– the precision of online PE, and– the efficiency of offline PE

• Our future work includes– correctness proof– termination guarantee

• The paper to appear in PEPM'00 is available from http://www.yl.is.s.u-tokyo.ac.jp/~sumii/pub/