inference and checking of object ownership

61
Inference and Checking of Object Ownership MD 輪講 博⼠後期課程 1 嘉晨 ⼤阪⼤学⼤学院コンピュータサイエンス専攻楠本研究室 2013 11 20 ⽇(⽊) ⼤阪⼤学⼤学院 CS 専攻 嘉晨 (楠本研) Ownership 2013 11 20 ⽇(⽊) 1 / 46

Upload: jiachen-yang

Post on 25-Jul-2015

61 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Inference  and  Checking  of  Object Ownership

Inference and Checking of Object OwnershipMD 輪講

博⼠後期課程 1 年 楊 嘉晨⼤阪⼤学⼤学院コンピュータサイエンス専攻楠本研究室

2013 年 11 ⽉ 20 ⽇(⽊)

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 1 / 46

Page 2: Inference  and  Checking  of  Object Ownership

⽬次.....1 背景 Introduction

...2 所有権型システム の統⼀されたフレームワーク Unified Framework forOwnership Type Systems

...3 型付けのラーキング Heuristic Ranking over Typings

...4 統合した型推測 Unified Type Inference

...5 実験結果 Empirical Results

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 2 / 46

Page 3: Inference  and  Checking  of  Object Ownership

背景 Introduction

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 3 / 46

Page 4: Inference  and  Checking  of  Object Ownership

出典PublicationECOOP 2012

• 26 ページ, B5 サイズ• European Conference on Object-Oriented Programming

Wei Huang1,Werner Dietl2, Ana Milanova1, and Michael D. Ernst2

• 1 Rensselaer Polytechnic Institute レンセラー⼯科⼤学• 2 University of Washington

Wei Huang ⽒最近の論⽂• Ana Milanova and Wei Huang, “Inference and Checking of Context-Sensitive Pluggable Types”, Proceedings of ACM SIGSOFT Symposium on the

Foundations of Software Engineering(FSE 2012), New Ideas Track, November 2012• Wei Huang, Ana Milanova, Werner Dietl, and Michael D. Ernst, “ReIm & ReImInfer: Checking and inference of reference immutability and

method purity”, Proceedings of Object-Oriented Programming Systems, Languages, and Applications (OOPSLA 2012), October 2012• Ana Milanova and Wei Huang, “Composing Polymorphic Noninterference Systems with Reference Immutability”, Proceedings of Formal

Techniques for Java-like Programs (FTfJP 2013), July 2013

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 4 / 46

Page 5: Inference  and  Checking  of  Object Ownership

オブジェクトの所有権Object Ownership

1 class XStack{2 Link top = null;3 void push (X d){4 Link l = new Link(d);5 l.next = top;6 top = l;7 }8 static void main(){9 XStack s = new XStack();

10 X x = new X();11 s.push(x);12 }13 }14 class Link {15 Link next = null;16 X data;17 Link(X d) { data = d; }18 }

ソースコード

参照 (reference) ̸= 所有関係 (ownership)

..root.

s

.

l

.

x

..root.

s

.

l

.

x

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 5 / 46

Page 6: Inference  and  Checking  of  Object Ownership

所有権を表す型システムOwnership-like Type Systems

変数のtype

型はqualifier

修飾⼦とclass type

クラス型の組み合わせで宣⾔するもの1 public Object a2 final Object b3 @NotNull Object c

..1 可視性

..2 可変性

..3 Null 可能

今回議論するのはownership

所有権を表すtype qualifier

型の修飾⼦1 own Object o

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 6 / 46

Page 7: Inference  and  Checking  of  Object Ownership

背景Introduction

既存のownership-like type systems

所有権型システム

• Universe Types (UT) [8]:owner

所有者as

はmodifier

変更者[8] Dietl, W., Muller, P. “Universes: Lightweight ownership for JML”. Journal of Object Technology 4(8), 5–32 (2005)

• Ownership Types (OT) [4]:owner

所有者as

はdominator

⽀配者[4] Clarke, D., Potter, J.M., Noble, J. “Ownership types for flexible alias protection”. OOPSLA, vol. 33, pp. 48–64 (1998)

.型修飾⼦の⾃動推測..

......

• ⼿動に付ける苦労を削減• 価値のある性質を明らかにする

.⾃動推測に難しいのは..

......

多数の型が可能の時,best typing

最適な型付けを決めること⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 7 / 46

Page 8: Inference  and  Checking  of  Object Ownership

UT と OT のイメージ

..root.

s

.

l1

.

l2

.

x1

.

x2

.

any

.

any

.

rep

.

rep

.

rep

.

rep

.

peer

..root.

s

.

l1

.

l2

.

x1

.

x2

.

<p|_>

.

<p|_>

.

<rep|_>

.

<rep|_>

.

<rep|_>

.

<rep|_>

.

<own|_>

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 8 / 46

Page 9: Inference  and  Checking  of  Object Ownership

この研究の貢献Contributions

• 所有権型システムのunified framework

統⼀されたフレームワーク• UT,OT をインスタンス化した

• 最適な型付けを決めるヒューリスティックな⽅法• 統合された型付けの推測⼿法

• 全⾃動的な最適 UT 推測• ⼿動の型付けで半⾃動的な OT 推測

• 平均 6/kLOC の⼿動関与

• 実証的な評価• 最⼤ 110kLOC の Java プログラム• UT と OT

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 9 / 46

Page 10: Inference  and  Checking  of  Object Ownership

所有権型システム の統⼀されたフレームワークUnified Framework for

Ownership Type Systems⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 10 / 46

Page 11: Inference  and  Checking  of  Object Ownership

A-正規形 Java ⽂法 [26]A-normal Form Java Syntax

説明するため、この⽂法を使います. 実装上, 普通の⽂法に対応できます

cd ::= class C extends D{fd md} クラスfd ::= τ f フィルド

md ::= τ m(τ x){τ y s; return y} メソッドs ::= s; s|x = new τ () ⽂

|x = y|x.f = y|x = y.f|x = y.m(z)|this.f = y|x = this.f|x = this.m(z)

τ ::= q C 修飾された型q ∈ Q 型修飾⼦

[26] Vaziri M., Tip F., Dolby J., Hammer C., Vitek J. “A Type System for Data- Centric Synchronization”. ECOOP 2010. LNCS, vol. 6183, pp. 304–328.

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 11 / 46

Page 12: Inference  and  Checking  of  Object Ownership

統⼀されたフレームワークUnified Framework⼀つの所有権型システムは4つのものに定義されます:{Q, <:,▷,B}

Q 型修飾⼦の集合• τ ::= q C q ∈ Q• 例 (UT): {peer, rep, any}

<:sub-typing hierarchy

サブタイプ階層• 例 (UT): peer <: any, rep <: any

▷viewpoint adaptation function

視点適応関数 q ▷ q′ (後述)B 追加制約集合

• 型システムに特殊な制約⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 12 / 46

Page 13: Inference  and  Checking  of  Object Ownership

視点適応関数: q1 ▷ q2 = q[8]Viewpoint Adaptation Function

1 class X{2 q2 f;3 void main(){4 q1 X x;5 (q) x.f;6 }7 }

typeof(x) = q1typeof(f) = q2

typeof(x.f) = q1 ▷ q2 = q

型 q1 の x の視点から⾒る型 q2 の f があるとし, 現在の視点 this から⾒る型は q = q1 ▷ q2[8] Dietl, W., Muller, P. “Universes: Lightweight ownership for JML”. Journal of Object Technology 4(8), 5–32 (2005)

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 13 / 46

Page 14: Inference  and  Checking  of  Object Ownership

共通する型制約Unified Typing Rules

.TNEW

..

......

Γ(x) = qx q <: qxB(TNEW)(qx, q)

Γ ⊢ x = new q C()

.TASSIGN..

......

Γ(x) = qx Γ(y) = qyqy <: qx

B(ASSIGN)(qx, q)Γ ⊢ x = y

.TWRITE

..

......

Γ(x) = qx Γ(y) = qytypeof(f) = qfqy <: qx ▷ qf

B(TWRITETHIS)(qx, qf, qy)

Γ ⊢ x.f = y

.TWRITETHIS..

......

typeof(f) = qf Γ(y) = qyqy <: qf

B(TWRITETHIS)(qf, qy)

Γ ⊢ this.f = y

.TREAD

..

......

Γ(x) = qx Γ(y) = qytypeof(f) = qfqy ▷ qf <: qx

B(TREAD)(qx, qf, qy)

Γ ⊢ x = y.f

.TREADTHIS..

......

typeof(f) = qf Γ(x) = qxqx <: qf

B(TREADTHIS)(qf, qx)

Γ ⊢ x = this.f

.TCALL

..

......

typeof(m) = q → q′

Γ(x) = qx Γ(y) = qy Γ(z) = qzqz <: qy ▷ q qy ▷ q′ <: qx

B(TCALL)(m, qy, qx)

Γ ⊢ x = y.m(z)

.TCALLTHIS

..

......

typeof(m) = q → q′

Γ(x) = qx Γ(z) = qzqz <: q q′ <: qxB(TCALLTHIS)(m, qx)

Γ ⊢ x = this.m(z)

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 14 / 46

Page 15: Inference  and  Checking  of  Object Ownership

Universe Types (UT)[8,5]owner

所有者as

はmodifier

変更者: オブジェクトを変更できるのはowner

所有者とpeer

同僚のみ..QUT = {peer, rep, lost, any}..

......

peer this と x は所有者が同じのオブジェクト同志

rep this は x の所有者

lost (内部で使う) 制約は確かにあるが, 現時点で表せない

any 所有権で表せない

rep <: lost peer <: lost lost <: any

List

Node

OaM

✓ ✓ ✓ ✓✗ ✗

.視点適応関数..

......

peer ▷ peer = peerrep ▷ peer = rep_ ▷ any = anyq ▷ q′ = lost otherwise

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 15 / 46

Page 16: Inference  and  Checking  of  Object Ownership

Universe Types (UT)[8,5]owner

所有者as

はmodifier

変更者: オブジェクトを変更できるのはowner

所有者とpeer

同僚のみ..QUT = {peer, rep, lost, any}..

......

peer this と x は所有者が同じのオブジェクト同志

rep this は x の所有者

lost (内部で使う) 制約は確かにあるが, 現時点で表せない

any 所有権で表せない

rep <: lost peer <: lost lost <: any

List

Node

OaM

✓ ✓ ✓ ✓✗ ✗

.視点適応関数..

......

peer ▷ peer = peerrep ▷ peer = rep_ ▷ any = anyq ▷ q′ = lost otherwise

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 15 / 46

Page 17: Inference  and  Checking  of  Object Ownership

Universe Types (UT)[8,5]owner

所有者as

はmodifier

変更者: オブジェクトを変更できるのはowner

所有者とpeer

同僚のみ..QUT = {peer, rep, lost, any}..

......

peer this と x は所有者が同じのオブジェクト同志

rep this は x の所有者

lost (内部で使う) 制約は確かにあるが, 現時点で表せない

any 所有権で表せない

rep <: lost peer <: lost lost <: any

List

Node

OaM

✓ ✓ ✓ ✓✗ ✗

.視点適応関数..

......

peer ▷ peer = peerrep ▷ peer = rep_ ▷ any = anyq ▷ q′ = lost otherwise

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 15 / 46

Page 18: Inference  and  Checking  of  Object Ownership

Universe Types (UT)[8,5]owner

所有者as

はmodifier

変更者: オブジェクトを変更できるのはowner

所有者とpeer

同僚のみ..QUT = {peer, rep, lost, any}..

......

peer this と x は所有者が同じのオブジェクト同志

rep this は x の所有者

lost (内部で使う) 制約は確かにあるが, 現時点で表せない

any 所有権で表せない

rep <: lost peer <: lost lost <: any

List

Node

OaM

✓ ✓ ✓ ✓✗ ✗

.視点適応関数..

......

peer ▷ peer = peerrep ▷ peer = rep_ ▷ any = anyq ▷ q′ = lost otherwise

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 15 / 46

Page 19: Inference  and  Checking  of  Object Ownership

UT の追加制約

B(TNEW)(ql, qr) = {qr ̸= any}B(TWRITE)(qr, qf, qo) = {qr ̸= any, qr ▷ qf ̸= lost}B(TCALL)(m, qr, qo) = let typeof(m) = q → q′ in

if impure(m)[13] then {qr ̸= any, qr ▷ q ̸= lost}else {qr ▷ q ̸= lost}

下線が付いたのは変更者を規則する部分[13] Huang W., Milanova A. “A Type System for Reference Immutability”. Technical report, Rensselaer Polytechnic Institute, CS (2011)

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 16 / 46

Page 20: Inference  and  Checking  of  Object Ownership

UT を適⽤した例1 class XStack {2 any Link top;3 XStack() {4 top = null;5 }6 void push(any X d1) {7 rep Link newTop;8 newTop = new rep Link();9 newTop.init(d1);

10 newTop.next = top;11 top = newTop;12 }13 void main(String[] arg) {14 rep XStack s;15 s = new rep XStack();16 any X x = new rep X();17 s.push(x);18 }19 }

1 class Link {2 any Link next;3 any X data;4 void init(any X d2) {5 next = null;6 data = d2;7 }8 }

..root.

s

.

l

.

x

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 17 / 46

Page 21: Inference  and  Checking  of  Object Ownership

Ownership Types(OT)[4]owner

所有者as

はdominator

⽀配者: オブジェクトは所有者の外にexpose

出せない.

List

Node

OaD

✓ ✓ ✓ ✓✗✗

.QOT = {⟨q0|q1⟩|q0, q1 ∈ {rep, own, p}}..

......

rep this を表すown this の所有者を表す

p this に与えた所有関係のパラメーター

QOT = {⟨rep|rep⟩, ⟨rep|own⟩, ⟨rep|p⟩, ⟨own|own⟩, ⟨own|p⟩, ⟨p|p⟩}BOT = ∅

OT にサブタイプの階層はない. サブタイプ関係は同値関係になる[4] Clarke, D., Potter, J.M., Noble, J. “Ownership types for flexible alias protection”. OOPSLA, vol. 33, pp. 48–64 (1998)

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 18 / 46

Page 22: Inference  and  Checking  of  Object Ownership

OT: 型修飾⼦ ⟨q0|q1⟩ の意味1 class L {2 <q0|q1> x;3 }

q0: x の所有者q1: x の所有関係のパラメーター

q0 と q1 に以下から選べる:..1 rep を指定して,  オブジェクト⾃⾝をさす..2 own を指定して, this の所有者をさす..3 p を指定して, パラメーターから受け取ったオブジェクトをさす

(例) ⟨rep|own⟩x: x の所有者は this, パラメーターは this の所有者パラメーターの数は2つ以上でも可能

• 実験の結果から⾒ると 1 つは⼗分• 増えるほど理解しにくい

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 19 / 46

Page 23: Inference  and  Checking  of  Object Ownership

OT の視点適応関数⟨q0|q1⟩▷ ⟨own|own⟩ = ⟨q0|q0⟩⟨q0|q1⟩▷ ⟨own|p⟩ = ⟨q0|q1⟩⟨q0|q1⟩▷ ⟨own|p⟩ = ⟨q1|q1⟩

フィルドの型 (▷ の右) は rep を含む場合, 静的制約を破ります1 class L {2 <rep|rep> C y;3 void main(){ x=y.f }4 }5 class C{6 <own|p> F f;7 }

y.f の型修飾⼦は <rep|rep> になる

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 20 / 46

Page 24: Inference  and  Checking  of  Object Ownership

OT の視点適応関数⟨q0|q1⟩▷ ⟨own|own⟩ = ⟨q0|q0⟩⟨q0|q1⟩▷ ⟨own|p⟩ = ⟨q0|q1⟩⟨q0|q1⟩▷ ⟨own|p⟩ = ⟨q1|q1⟩

フィルドの型 (▷ の右) は rep を含む場合, 静的制約を破ります1 class L {2 <rep|rep> C y;3 void main(){ x=y.f }4 }5 class C{6 <own|p> F f;7 }

y.f の型修飾⼦は <rep|rep> になる

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 20 / 46

Page 25: Inference  and  Checking  of  Object Ownership

OT を適⽤した例1 class XStack {2 <rep|p> Link top;3 XStack() {4 top = null;5 }6 void push( p|p X d1) {7 <rep|p> Link newTop;8 newTop = new <rep|p> Link();9 newTop.init(d1);

10 newTop.next = top;11 top = newTop;12 }13 void main(String[] arg) {14 <rep|rep> XStack s;15 s = new rep|rep XStack();16 <rep|rep> X x = new <rep|rep> X();17 s.push(x);18 }19 }

1 class Link {2 <own|p> Link next;3 <p|p> X data;4 void init(<p|p> X d2) {5 next = null;6 data = d2;7 }8 }

..root.

s

.

l

.

x

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 21 / 46

Page 26: Inference  and  Checking  of  Object Ownership

型付けのラーキングHeuristic Ranking over Typings

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 22 / 46

Page 27: Inference  and  Checking  of  Object Ownership

⼀つのプログラムには多数の有効型付け案が可能1 class XStack {2 any Link top;3 XStack() {4 top = null;5 }6 void push(any X d1) {7 rep Link newTop;8 newTop = new rep Link();9 newTop.init(d1);

10 newTop.next = top;11 top = newTop;12 }13 void main(String[] arg) {14 rep XStack s;15 s = new rep XStack();16 any X x = new rep X();17 s.push(x);18 }19 }

1 class Link {2 any Link next;3 any X data;4 void init(any X d2) {5 next = null;6 data = d2;7 }8 }

..root.

s

.

l

.

x

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 23 / 46

Page 28: Inference  and  Checking  of  Object Ownership

⼀つのプログラムには多数の有効型付け案が可能1 class XStack {2 peer Link top;3 XStack() {4 top = null;5 }6 void push(peer X d1) {7 peer Link newTop;8 newTop = new peer Link();9 newTop.init(d1);

10 newTop.next = top;11 top = newTop;12 }13 void main(String[] arg) {14 peer XStack s;15 s = new peer XStack();16 peer X x = new peer X();17 s.push(x);18 }19 }

1 class Link {2 peer Link next;3 peer X data;4 void init(peer X d2) {5 next = null;6 data = d2;7 }8 }

..root.

s

.

l

.

x

ゆるい型が付けられたら, 平坦なオブジェクト階層になって, 全てのアクセスは許されてしまう

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 23 / 46

Page 29: Inference  and  Checking  of  Object Ownership

⼀つのプログラムには多数の有効型付け案が可能1 class XStack {2 peer Link top;3 XStack() {4 top = null;5 }6 void push(peer X d1) {7 peer Link newTop;8 newTop = new peer Link();9 newTop.init(d1);

10 newTop.next = top;11 top = newTop;12 }13 void main(String[] arg) {14 peer XStack s;15 s = new peer XStack();16 peer X x = new peer X();17 s.push(x);18 }19 }

1 class Link {2 peer Link next;3 peer X data;4 void init(peer X d2) {5 next = null;6 data = d2;7 }8 }

..root.

s

.

l

.

x

ゆるい型が付けられたら, 平坦なオブジェクト階層になって, 全てのアクセスは許されてしまう

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 23 / 46

Page 30: Inference  and  Checking  of  Object Ownership

型付けにヒューリスティックなランキングの⽬的

主観的に:深いツリー構造で表す所有権がほしいランキング:ツリー構造の深さに影響する性質を

objective function

⽬標関数o として定義し, その値を最⼤化する. valid

有効なtyping

型付け..

......

P: プログラームF: 所有権型システムTP,F: 型付け案

TP,F は有効: 全ての制約を満たす若しプログラマーに⼿動でつけた型があると, それも制約に含まれる

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 24 / 46

Page 31: Inference  and  Checking  of  Object Ownership

UT の⽬標関数 oUT.修飾⼦のランキング........{any} > {rep} > {peer}.⽬標関数........oUT(T) = (|T−1(any)|, |T−1(rep)|, |T−1(peer)|).⽬標関数のベクトルを辞書順で⽐較する........oUT(T1) = (4, 5, 0) > oUT(T2) = (3, 5, 0) > oUT(T3) = (3, 4, 10).UT の最適型付け........max{oT | ∀T ∈ {有効な型付け案 T}}⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 25 / 46

Page 32: Inference  and  Checking  of  Object Ownership

OT の⽬標関数 oOTベース修飾⼦のランキング {rep} > {own} > {p}.辞書順は最適でないの例 oOT(⟨rep|rep⟩) ≯ oOT(⟨rep|p⟩)..

......

..root.

i

.

m

.

k

.

l

.

l′

.

j

..root.

i

.

m

.

k

.

l

.

l′

.

j

i → m を rep にした場合

..root.

m

.

i

.

k

.

l

.

l′

.

j

k → l を rep にした場合

oOT(T) = (|T−1(⟨rep|_⟩)|, |T−1(⟨own|_⟩)|, |T−1(⟨p|_⟩)|)⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 26 / 46

Page 33: Inference  and  Checking  of  Object Ownership

最⼤型付けMaximal Typing.定義 1: 最⼤型付け..

......プログラム P と⽬標関数 o の型システム F に対し, 全ての有効な型付け Tの内,   o を最⼤化した T は最⼤型付け.UT に唯⼀な最⼤型付けが存在する.OT に異なる最⼤型付けが多数存在する..

......

1 x = new X();2 y = new Y();3 x.f = y;

T1:1 <rep|own> x = new <rep|own> X();2 <rep|own> y = new <rep|own> Y();3 <own|p> f;

T2:1 <rep|rep> x = new <rep|rep> X();2 <rep|rep> y = new <rep|rep> Y();3 <own|own> f;

oOT(T1) = oOT(T2) = (4, 1, 0)⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 27 / 46

Page 34: Inference  and  Checking  of  Object Ownership

統合した型推測 Unified TypeInference

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 28 / 46

Page 35: Inference  and  Checking  of  Object Ownership

統合した型推測: 集合ベースの推測Unified Type Inference: Set Based Solution

(OT 等の型システムに対し) 全⾃動で型推測は不可能→ 協⼒的に半⾃動で型を推測.キーアイデア: 集合ベースの推測........各変数宣⾔に型修飾⼦の有効集合を求める.集合のマッピング..

......

SP,F は各変数宣⾔の型修飾⼦の有効集合

S0(v) ={

{q} プログラーマーが v に⼿動つけた型修飾⼦QF 型修飾⼦の最⼤集合

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 29 / 46

Page 36: Inference  and  Checking  of  Object Ownership

統合した型推測: 集合ベースの推測Unified Type Inference: Set Based Solution

(OT 等の型システムに対し) 全⾃動で型推測は不可能→ 協⼒的に半⾃動で型を推測.キーアイデア: 集合ベースの推測........各変数宣⾔に型修飾⼦の有効集合を求める.集合のマッピング..

......

SP,F は各変数宣⾔の型修飾⼦の有効集合

S0(v) ={

{q} プログラーマーが v に⼿動つけた型修飾⼦QF 型修飾⼦の最⼤集合

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 29 / 46

Page 37: Inference  and  Checking  of  Object Ownership

統合した型推測: 集合ベースの推測Unified Type Inference: Set Based Solution

(OT 等の型システムに対し) 全⾃動で型推測は不可能→ 協⼒的に半⾃動で型を推測.キーアイデア: 集合ベースの推測........各変数宣⾔に型修飾⼦の有効集合を求める.集合のマッピング..

......

SP,F は各変数宣⾔の型修飾⼦の有効集合

S0(v) ={

{q} プログラーマーが v に⼿動つけた型修飾⼦QF 型修飾⼦の最⼤集合

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 29 / 46

Page 38: Inference  and  Checking  of  Object Ownership

統合した型推測: 集合ベースの推測Unified Type Inference: Set Based Solution

(OT 等の型システムに対し) 全⾃動で型推測は不可能→ 協⼒的に半⾃動で型を推測.キーアイデア: 集合ベースの推測........各変数宣⾔に型修飾⼦の有効集合を求める.集合のマッピング..

......

SP,F は各変数宣⾔の型修飾⼦の有効集合

S0(v) ={

{q} プログラーマーが v に⼿動つけた型修飾⼦QF 型修飾⼦の最⼤集合

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 29 / 46

Page 39: Inference  and  Checking  of  Object Ownership

統合した型推測の⼿法Architecture of Unified Type Inference

..統合制約. 集合ベースのソルバー

. 最適型付けを抽出

. 型の制約をチェック

.

最適型付け

.

{Q, <:, ▷, B}

.

ソースコード

.

⼿動で型付け

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 30 / 46

Page 40: Inference  and  Checking  of  Object Ownership

伝達関数と不動点まで繰り返しTransfer Function and Fixpoint Iteration

.伝達関数 fs : S → S′........伝達関数 fs は S に s ⽂の制約を破った型付けを削除.不動点まで繰り返し..

......

全ての伝達関数を以下の状況がでるまで S にかけて繰り返す..1 S は変わらない, 解に導いた..2 S にある変数の型集合は空, プログラームに型が⽭盾している

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 31 / 46

Page 41: Inference  and  Checking  of  Object Ownership

UT の型推測例1 class XStack {2 {any,rep,peer} Link top;3 XStack() {4 top = null;5 }6 void push({any,rep,peer} X d1) {7 {any,rep,peer} Link newTop;8 newTop = new {any,rep,peer} Link();9 newTop.init(d1);

10 newTop.next = top;11 top = newTop;12 }13 void main(String[] arg) {14 {any,rep,peer} XStack s;15 s = new {any,rep,peer} XStack();16 {any,rep,peer} X x = new {any,rep,peer} X();17 s.push(x);18 }19 }

初期状態1 class Link {2 {any,rep,peer} Link next;3 {any,rep,peer} X data;4 void init({any,rep,peer} X d2) {5 next = null;6 data = d2;7 }8 }

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 32 / 46

Page 42: Inference  and  Checking  of  Object Ownership

UT の型推測例1 class XStack {2 {any,rep,peer} Link top;3 XStack() {4 top = null;5 }6 void push({any,rep,peer} X d1) {7 {any,rep,peer} Link newTop;8 newTop = new { rep,peer} Link();9 newTop.init(d1);

10 newTop.next = top;11 top = newTop;12 }13 void main(String[] arg) {14 {any,rep,peer} XStack s;15 s = new {any,rep,peer} XStack();16 {any,rep,peer} X x = new {any,rep,peer} X();17 s.push(x);18 }19 }

BTNEW = {qr ̸= any}1 class Link {2 {any,rep,peer} Link next;3 {any,rep,peer} X data;4 void init({any,rep,peer} X d2) {5 next = null;6 data = d2;7 }8 }

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 32 / 46

Page 43: Inference  and  Checking  of  Object Ownership

UT の型推測例1 class XStack {2 {any,rep,peer} Link top;3 XStack() {4 top = null;5 }6 void push({any,rep,peer} X d1) {7 { rep,peer} Link newTop;8 newTop = new { rep,peer} Link();9 newTop.init(d1);

10 newTop.next = top;11 top = newTop;12 }13 void main(String[] arg) {14 {any,rep,peer} XStack s;15 s = new {any,rep,peer} XStack();16 {any,rep,peer} X x = new {any,rep,peer} X();17 s.push(x);18 }19 }

BTCALL = {qr ̸= any, qr ▷ q ̸=lost}1 class Link {2 {any,rep,peer} Link next;3 {any,rep,peer} X data;4 void init({any ,peer} X d2) {5 next = null;6 data = d2;7 }8 }

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 32 / 46

Page 44: Inference  and  Checking  of  Object Ownership

UT の型推測例1 class XStack {2 {any,rep,peer} Link top;3 XStack() {4 top = null;5 }6 void push({any ,peer} X d1) {7 { rep,peer} Link newTop;8 newTop = new { rep,peer} Link();9 newTop.init(d1);

10 newTop.next = top;11 top = newTop;12 }13 void main(String[] arg) {14 { rep,peer} XStack s;15 s = new { rep,peer} XStack();16 {any,rep,peer} X x = new { rep,peer} X();17 s.push(x);18 }19 }

イテレーション 1 がおわった時点1 class Link {2 {any, peer} Link next;3 {any, peer} X data;4 void init({any, peer} X d2) {5 next = null;6 data = d2;7 }8 }

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 32 / 46

Page 45: Inference  and  Checking  of  Object Ownership

UT の型推測例1 class XStack {2 any Link top;3 XStack() {4 top = null;5 }6 void push( any X d1) {7 rep Link newTop;8 newTop = new rep Link();9 newTop.init(d1);

10 newTop.next = top;11 top = newTop;12 }13 void main(String[] arg) {14 rep XStack s;15 s = new rep XStack();16 any X x = new rep X();17 s.push(x);18 }19 }

最適化に選ばれた型1 class Link {2 any Link next;3 any X data;4 void init( any X d2) {5 next = null;6 data = d2;7 }8 }

OT の推測例を省略

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 32 / 46

Page 46: Inference  and  Checking  of  Object Ownership

UT の型推測例1 class XStack {2 any Link top;3 XStack() {4 top = null;5 }6 void push( any X d1) {7 rep Link newTop;8 newTop = new rep Link();9 newTop.init(d1);

10 newTop.next = top;11 top = newTop;12 }13 void main(String[] arg) {14 rep XStack s;15 s = new rep XStack();16 any X x = new rep X();17 s.push(x);18 }19 }

最適化に選ばれた型1 class Link {2 any Link next;3 any X data;4 void init( any X d2) {5 next = null;6 data = d2;7 }8 }

OT の推測例を省略

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 32 / 46

Page 47: Inference  and  Checking  of  Object Ownership

実験結果 Empirical Results

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 33 / 46

Page 48: Inference  and  Checking  of  Object Ownership

実装と実験対象既存ツールの Checker Framework[20,6] で実装した実験対象Benchmark #Lines #Meths DescriptionJOlden 6223 326 Benchmark suit of 10 small programstinySQL 31980 1597 Database enginehtmlparser 62627 1698 HTML parserejc 110822 4734 Compiler of the Eclipse IDEjavad 4207 140 Java class file disassemblerSPECjbb 12076 529 SPECʼs benchmark for evaluating server side Javajdepend 4351 328 Java package dependency analyzerclassycle 8972 440 Java class and package dependency analyzer

[20] Papi, M.M., Ali, M., Correa Jr., T.L., Perkins, J.H., Ernst, M.D. “Practical pluggable types for Java.”ISSTA, pp. 201–212 (2008)[6] Dietl, W., Dietzel, S., Ernst, M.D., Muslu, K., Schiller, T.W. “Building and Using Pluggable Type-Checkers. ” ICSE, pp. 681–690 (2011)

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 34 / 46

Page 49: Inference  and  Checking  of  Object Ownership

UT の実験結果

0%

10%

20%

30%

40%

50%

60%

70%

80%

90%

100%

any rep peer

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 35 / 46

Page 50: Inference  and  Checking  of  Object Ownership

UT の実験結果

Benchmark Pure Ref any rep peer TimeJOlden 175 685 227 (33%) 71 (10%) 387 (56%) 11.3tinySQL 965 2711 630 (23%) 104 ( 4%) 1977 (73%) 18.2htmlparser 642 3269 426 (13%) 153 ( 5%) 2690 (82%) 22.9ejc 1701 10957 1897 (17%) 122 ( 1%) 8938 (82%) 119.7javad 60 249 31 (12%) 11 ( 4%) 207 (83%) 4.1SPECjbb 195 1066 295 (28%) 74 ( 7%) 697 (65%) 13.6jdepend 102 542 95 (18%) 14 ( 3%) 433 (80%) 7.2classycle 260 946 87 ( 9%) 11 ( 1%) 848 (90%) 9.9

(ちなみに私のツールで htmlparser の Stateful+Stateless の純粋関数は 543)

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 36 / 46

Page 51: Inference  and  Checking  of  Object Ownership

UT の実験結果と既存研究 [7] の⽐較

既存研究 [7] の結果より, any をつけた変数の割合が⼤きくなった. 原因• 純粋関数の測定⼿法は違う

• 既存研究で javad の内 40 個の関数は⼿動で純粋関数であることを検証した• 本研究で 60 個の関数は⾃動で推測した, 増えたの 20 個は確かに純粋関数であることを検証した

• ヒューリスティックで最適修飾⼦を選ぶ⽅法が違った• 本研究で {any,rep} の場合に any にする• 既存研究では両⽅ありえる

[7] Dietl, W., Ernst, M.D., Müller, P. “Tunable Static Inference for Generic Universe Types. ”ECOOP 2011. vol. 6813, pp. 333–357. Springer

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 37 / 46

Page 52: Inference  and  Checking  of  Object Ownership

OT の実験結果

0%

10%

20%

30%

40%

50%

60%

70%

80%

90%

100%

<rep|_> <own|_> <p|_>

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 38 / 46

Page 53: Inference  and  Checking  of  Object Ownership

OT の実験結果

Benchmark Ref <rep|_> <own|_> <p|_> <norep|_> ⼿動 TimeJOlden 685 67(10%/10%) 497(73%) 24(4%) 97(14%) 13(2) 10.3tinySQL 2711 224(8%/11%) 530(20%) 5(0%) 1952(72%) 215(7) 18.4htmlparser 3269 330(10%/11%) 629(19%) 36(1%) 2274(70%) 200(3) 33.6ejc 10957 467(4%/4%) 1768(16%) 50(0%) 8672(79%) 592(5) 122.4javad 249 44(18%/19%) 27(11%) 74(30%) 104(42%) 46(10) 5.5SPECjbb 1066 166(16%/16%) 141(13%) 71(7%) 688(65%) 73(6) 17.1jdepend 542 130(24%/25%) 156(29%) 128(24%) 128(24%) 26(6) 13.7classycle 946 153(16%/20%) 173(18%) 28(3%) 592(63%) 90(10) 11.7

<rep|_> 列の2つ⽬の割合は理論上限, パラメーター数を増えても超えない

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 39 / 46

Page 54: Inference  and  Checking  of  Object Ownership

OT の実験結果に対する議論

• UT の結果に⽐べて rep の割合は⼤きいが, ⽐較は無意味 (後述)• ⼿動で付ける型は 6 個/kLOC, 実⽤的• 表での時間は⼿動で付ける必要がある型が与えた後、ツールをかける時間のみ. ⼿動で選ぶ時間を計算すると,JOlden は約 10 分間,SPECjbb は約 2 時間を掛かりました.

既存研究との⽐較は⾏われてない

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 40 / 46

Page 55: Inference  and  Checking  of  Object Ownership

UT と OT の⽐較: 所有権の割合

...UT:rep

. 5%..

UT&OT:rep

.

9%

..

OT:rep

.

31%

..

Other

.

55%

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 41 / 46

Page 56: Inference  and  Checking  of  Object Ownership

UT と OT の⽐較OT: <rep|_> <rep|_> not <rep|_> not <rep|_>UT: rep peer rep not repJOlden 26 (22%) 8 ( 7%) 19 (16%) 66 (55%)tinySQL 32 ( 6%) 123 (24%) 13 ( 2%) 355 (68%)htmlparser 27 ( 2%) 234 (20%) 16 ( 1%) 926 (77%)ejc 44 ( 2%) 336 (12%) 81 ( 3%) 2321 (83%)javad 6 (10%) 38 (66%) 0 ( 0%) 14 (24%)SPECjbb 75 (26%) 84 (29%) 25 ( 9%) 110 (37%)jdepend 13 ( 7%) 71 (41%) 1 ( 1%) 90 (51%)classycle 1 ( 0%) 109 (45%) 5 ( 2%) 128 (53%)

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 42 / 46

Page 57: Inference  and  Checking  of  Object Ownership

オブジェクト所有権構造で OT は UT より深い例

オブジェクト図..root.

i

.

j

.

k

OT のツリー..root.

i

.

j

.

k

UT のツリー..root.

i

.

j

.

k

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 43 / 46

Page 58: Inference  and  Checking  of  Object Ownership

オブジェクト所有権構造で UT は OT より深い例

オブジェクト図..root.

x

.

c

.

e

.

i

OT のツリー..root.

x

.

c

.

i

.

e

UT のツリー..root.

x

.

c

.

e

.

i

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 44 / 46

Page 59: Inference  and  Checking  of  Object Ownership

結論Conclusion

• 所有権型システムを推測と検証するための統⼀されたフレームワークを提案した

• UT と OT の2つ既存の所有権型システムにインスタンス化した• 有効な型付けのランキングを決めるヒューリスティックの⽅法• 最⼤型付けの⾃動・半⾃動推測⼿法• 実装して, 規模がある対象に UT と OT を実験した

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 45 / 46

Page 60: Inference  and  Checking  of  Object Ownership

論⽂を読んだ感想上から⽬線で

• 「既存研究に対するメソット抽出リファクタリング」⾒たいな研究は初⾒

• 若⼲無理⽮理感をした• 追加制約 B は UT のみ• 型修飾⼦のサブタイプルールも UT のみ• 純粋関数判定に依存するのも UT のみ

• と関わらず (書いてないが)UT の⽅が優れる感

• 理解しやすい• 最適解が保証される• ⼿動関与は要らない

• 2つの⼿法を組み合わせによって, 既存研究より良い結果が期待されているが, そうでもなかった

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 46 / 46

Page 61: Inference  and  Checking  of  Object Ownership

集合ベースの⼿法の性質Properties of Set-Based Solution.命題 1........若し q /∈ S(v) なら, T(v) = q に成り⽴てる有効型付け T ∈ S0 は存在しない.命題 2........P の全て変数宣⾔ v に対し T(v) = max(S(v)) なら, T は P の最⼤型付け.性質 1: 最適化性質..

......全ての変数宣⾔ v に型集合の最⼤修飾⼦は有効である場合に限り, 型付けは最適化された.時間複雑度........集合ベースのアルゴリズムの時間複雑度は O(n2), そのうち n はプログラムの⽂の数.⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 47 / 46