SlideShare a Scribd company logo
1 of 61
Download to read offline
Inference

and

Checking

of

Object Ownership

MD 輪講
博⼠後期課程 1 年

楊 嘉晨

⼤阪⼤学⼤学院コンピュータサイエンス専攻楠本研究室

2013 年 11 ⽉ 20 ⽇(⽊)

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

1 / 46
⽬次
.
. 背景 Introduction

1

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

2

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

3

. 統合した型推測 Unified Type Inference

4

. 実験結果 Empirical Results

5

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

2 / 46
背景 Introduction

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

3 / 46
出典
Publication

ECOOP 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
オブジェクトの所有権
Object Ownership
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

class XStack{
Link top = null;
void push (X d){
Link l = new Link(d);
l.next = top;
top = l;
}
static void main(){
XStack s = new XStack();
X x = new X();
s.push(x);
}
}
class Link {
Link next = null;
X data;
Link(X d) { data = d; }
}

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

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

.
root
s
l
Ownership

x

s

x

l
2013 年 11 ⽉ 20 ⽇(⽊)

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

qualifier

class type

変数の型は修飾⼦とクラス型の組み合わせで宣⾔するもの
1
.

1 public
Object a
2 final
Object b
3 @NotNull Object c

2
.
3
.

ownership

可視性
可変性
Null 可能

type qualifier

今回議論するのは所有権を表す型の修飾⼦
1 own

Object o

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

6 / 46
背景
Introduction

ownership-like type systems

既存の所有権型システム
owner

as

modifier

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

owner

as dominator

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

.
型修飾⼦の⾃動推測
.
• ⼿動に付ける苦労を削減
• 価値のある性質を明らかにする
.
⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

Ownership

.
⾃動推測に難しいのは
.
多数の型が可能の時,
best typing

最適な型付けを決めること
.
2013 年 11 ⽉ 20 ⽇(⽊)

7 / 46
UT と OT のイメージ
.
root
rep

rep
s
rep

.
root

rep

<rep|_>
<rep|_>
<rep|_>
s
x1

x1

<rep|_>

any x2
l1

peer

<p|_> x2
l1

any

<own|_>

l2

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

<p|_>
l2

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

8 / 46
この研究の貢献
Contributions
unified framework

• 所有権型システムの統⼀されたフレームワーク
• UT,OT をインスタンス化した
• 最適な型付けを決めるヒューリスティックな⽅法
• 統合された型付けの推測⼿法
• 全⾃動的な最適 UT 推測
• ⼿動の型付けで半⾃動的な OT 推測
• 平均 6/kLOC の⼿動関与

• 実証的な評価
• 最⼤ 110kLOC の Java プログラム
• UT と OT
⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

9 / 46
所有権型システム の
統⼀されたフレームワーク
Unified Framework for
Ownership Type Systems
⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

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

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

class C extends D{fd md}
τf
τ m(τ x){τ y s; return y}
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
統⼀されたフレームワーク
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
視点適応関数: 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) = q1
typeof(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
共通する型制約
Unified Typing Rules
.
TWRITE
.

.
TNEW
.

Γ(x) = qx Γ(y) = qy
typeof(f) = qf
qy <: qx ▷ qf
B(TWRITETHIS) (qx , qf , qy )

Γ(x) = qx q <: qx
B(TNEW) (qx , q)
. Γ ⊢ x = new q C()
.
.
TASSIGN
.

Γ ⊢ x.f = y

.
TWRITETHIS
.

Γ(x) = qx Γ(y) = qy
qy <: qx
B(ASSIGN) (qx , q)
.

.
TREAD
.

.

Γ ⊢ this.f = y

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

typeof(m) = q → q′
Γ(x) = qx Γ(y) = qy Γ(z) = qz
qz <: qy ▷ q qy ▷ q′ <: qx
B(TCALL) (m, qy , qx )

Γ(x) = qx Γ(y) = qy
typeof(f) = qf
qy ▷ qf <: qx
B(TREAD) (qx , qf , qy )
.

Γ ⊢ x = y.f

.
TREADTHIS
.

typeof(f) = qf Γ(y) = qy
qy <: qf
B(TWRITETHIS) (qf , qy )

Γ ⊢x=y

.
TCALL
.

.

.
TCALLTHIS
.
typeof(m) = q → q′
Γ(x) = qx Γ(z) = qz
qz <: q q′ <: qx
B(TCALLTHIS) (m, qx )

typeof(f) = qf Γ(x) = qx
qx <: qf
B(TREADTHIS) (qf , qx )
.

Γ ⊢ x = this.f
.
Ownership

Γ ⊢ x = y.m(z)

Γ ⊢ x = this.m(z)
2013 年 11 ⽉ 20 ⽇(⽊)

14 / 46
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

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

lost <: any
Ownership

OaM
List

✗ ✓ ✓

✓ ✓✗

Node

.
視点適応関数
.
peer
rep
_
. q

▷
▷
▷
▷

peer
peer
any
q′

=
=
=
=

peer
rep
any
lost otherwise

2013 年 11 ⽉ 20 ⽇(⽊)

15 / 46
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

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

lost <: any
Ownership

OaM
List

✗ ✓ ✓

✓ ✓✗

Node

.
視点適応関数
.
peer
rep
_
. q

▷
▷
▷
▷

peer
peer
any
q′

=
=
=
=

peer
rep
any
lost otherwise

2013 年 11 ⽉ 20 ⽇(⽊)

15 / 46
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

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

lost <: any
Ownership

OaM
List

✗ ✓ ✓

✓ ✓✗

Node

.
視点適応関数
.
peer
rep
_
. q

▷
▷
▷
▷

peer
peer
any
q′

=
=
=
=

peer
rep
any
lost otherwise

2013 年 11 ⽉ 20 ⽇(⽊)

15 / 46
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

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

lost <: any
Ownership

OaM
List

✗ ✓ ✓

✓ ✓✗

Node

.
視点適応関数
.
peer
rep
_
. q

▷
▷
▷
▷

peer
peer
any
q′

=
=
=
=

peer
rep
any
lost otherwise

2013 年 11 ⽉ 20 ⽇(⽊)

15 / 46
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
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 }

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

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

x

l

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

17 / 46
Ownership Types(OT)[4]
owner
as dominator

expose

所有者は⽀配者: オブジェクトは所有者の外に出せない.
.
OaD
QOT = {⟨q0 |q1 ⟩|q0 , q1 ∈ {rep, own, p}}
List
.
rep this を表す
✗✗
✓ ✓ ✓✓
own this の所有者を表す
Node
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
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
OT の視点適応関数
⟨q0 |q1 ⟩ ▷ ⟨own|own⟩ = ⟨q0 |q0 ⟩
⟨q0 |q1 ⟩ ▷ ⟨own|p⟩
= ⟨q0 |q1 ⟩
⟨q0 |q1 ⟩ ▷ ⟨own|p⟩
= ⟨q1 |q1 ⟩
フィルドの型 (▷ の右) は rep を含む場合, 静的制約を破ります
1
2
3
4
5
6
7

class L {
<rep|rep> C y;
void main(){ x=y.f }
}
class C{
<own|p> F f;
}

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

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

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

20 / 46
OT の視点適応関数
⟨q0 |q1 ⟩ ▷ ⟨own|own⟩ = ⟨q0 |q0 ⟩
⟨q0 |q1 ⟩ ▷ ⟨own|p⟩
= ⟨q0 |q1 ⟩
⟨q0 |q1 ⟩ ▷ ⟨own|p⟩
= ⟨q1 |q1 ⟩
フィルドの型 (▷ の右) は rep を含む場合, 静的制約を破ります
1
2
3
4
5
6
7

class L {
<rep|rep> C y;
void main(){ x=y.f }
}
class C{
<own|p> F f;
}

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

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

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

20 / 46
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 }

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

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

x

l

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

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

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

22 / 46
⼀つのプログラムには多数の有効型付け案が可能
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 }
⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

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

x

l

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

23 / 46
⼀つのプログラムには多数の有効型付け案が可能
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 }
⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

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

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

2013 年 11 ⽉ 20 ⽇(⽊)

23 / 46
⼀つのプログラムには多数の有効型付け案が可能
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 }
⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

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

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

2013 年 11 ⽉ 20 ⽇(⽊)

23 / 46
型付けにヒューリスティックなランキングの⽬的
主観的に:深いツリー構造で表す所有権がほしい

objective function

ランキング:ツリー構造の深さに影響する性質を⽬標関数o として定義し, そ
の値を最⼤化する
. valid
typing
有効な型付け
.
P: プログラーム
F: 所有権型システム
TP,F : 型付け案
.

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

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

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

24 / 46
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
OT の⽬標関数 oOT
ベース修飾⼦のランキング {rep} > {own} > {p}
.
辞書順は最適でないの例 oOT (⟨rep|rep⟩) ≯ oOT (⟨rep|p⟩)
.
.
root
.
root
m

j

i

.
root
j

i

j

i

k
m

.

k
l

m

k

l

l′

l

l′ i → m を rep にした場合

l′

k → l を rep にした場合

oOT (T) = (|T−1 (⟨rep|_⟩)|, |T−1 (⟨own|_⟩)|, |T−1 (⟨p|_⟩)|)
⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

26 / 46
最⼤型付け
Maximal Typing

.
定義 1: 最⼤型付け
.
プログラム P と⽬標関数 o の型システム F に対し, 全ての有効な型付け T
の内,   o を最⼤化した T は最⼤型付け.
.
UT に唯⼀な最⼤型付けが存在する
.
OT に異なる最⼤型付けが多数存在する
.
T1:
1 x = new X();
2 y = new Y();
3 x.f = y;

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
統合した型推測 Unified Type
Inference

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

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

(OT 等の型システムに対し) 全⾃動で型推測は不可能
→ 協⼒的に半⾃動で型を推測
.
キーアイデア: 集合ベースの推測
.
各
. 変数宣⾔に型修飾⼦の有効集合を求める
.
集合のマッピング
.
SP,F は各変数宣⾔の型修飾⼦の有効集合
{
{q} プログラーマーが v に⼿動つけた型修飾⼦
S0 (v) =
QF 型修飾⼦の最⼤集合
.
⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

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

(OT 等の型システムに対し) 全⾃動で型推測は不可能
→ 協⼒的に半⾃動で型を推測
.
キーアイデア: 集合ベースの推測
.
各
. 変数宣⾔に型修飾⼦の有効集合を求める
.
集合のマッピング
.
SP,F は各変数宣⾔の型修飾⼦の有効集合
{
{q} プログラーマーが v に⼿動つけた型修飾⼦
S0 (v) =
QF 型修飾⼦の最⼤集合
.
⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

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

(OT 等の型システムに対し) 全⾃動で型推測は不可能
→ 協⼒的に半⾃動で型を推測
.
キーアイデア: 集合ベースの推測
.
各
. 変数宣⾔に型修飾⼦の有効集合を求める
.
集合のマッピング
.
SP,F は各変数宣⾔の型修飾⼦の有効集合
{
{q} プログラーマーが v に⼿動つけた型修飾⼦
S0 (v) =
QF 型修飾⼦の最⼤集合
.
⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

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

(OT 等の型システムに対し) 全⾃動で型推測は不可能
→ 協⼒的に半⾃動で型を推測
.
キーアイデア: 集合ベースの推測
.
各
. 変数宣⾔に型修飾⼦の有効集合を求める
.
集合のマッピング
.
SP,F は各変数宣⾔の型修飾⼦の有効集合
{
{q} プログラーマーが v に⼿動つけた型修飾⼦
S0 (v) =
QF 型修飾⼦の最⼤集合
.
⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

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

⼿動で型付け

.
統合制約

集合ベース
のソルバー

{Q, <:, ▷, B}

最適型付
けを抽出

型の制約
をチェック

ソースコード
最適型付け

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

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

.
伝達関数 fs : S → S′
.
伝
. 達関数 fs は S に s ⽂の制約を破った型付けを削除
.
不動点まで繰り返し
.
全ての伝達関数を以下の状況がでるまで S にかけて繰り返す
1 S は変わらない, 解に導いた
.
. 2. S にある変数の型集合は空, プログラームに型が⽭盾している

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

31 / 46
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 }
⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

Ownership

初期状態
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 }

2013 年 11 ⽉ 20 ⽇(⽊)

32 / 46
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 }
⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

Ownership

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 }

2013 年 11 ⽉ 20 ⽇(⽊)

32 / 46
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 }
⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

Ownership

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 }

2013 年 11 ⽉ 20 ⽇(⽊)

32 / 46
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 }
⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

Ownership

イテレーション 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 }

2013 年 11 ⽉ 20 ⽇(⽊)

32 / 46
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
17
s.push(x);
18
}
19 }
⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

最適化に選ばれた型
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 }
X();

Ownership

OT の推測例を省略
2013 年 11 ⽉ 20 ⽇(⽊)

32 / 46
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
17
s.push(x);
18
}
19 }
⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

最適化に選ばれた型
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 }
X();

Ownership

OT の推測例を省略
2013 年 11 ⽉ 20 ⽇(⽊)

32 / 46
実験結果 Empirical Results

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

33 / 46
実装と実験対象
既存ツールの Checker Framework[20,6] で実装した
実験対象
Benchmark
JOlden
tinySQL
htmlparser
ejc
javad
SPECjbb
jdepend
classycle

#Lines
6223
31980
62627
110822
4207
12076
4351
8972

#Meths
326
1597
1698
4734
140
529
328
440

Description
Benchmark suit of 10 small programs
Database engine
HTML parser
Compiler of the Eclipse IDE
Java class file disassembler
SPECʼs benchmark for evaluating server side Java
Java package dependency analyzer
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
UT の実験結果
any

rep

peer

100%

90%
80%
70%
60%

50%
40%
30%
20%

10%
0%

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

35 / 46
UT の実験結果
Benchmark
JOlden
tinySQL
htmlparser
ejc
javad
SPECjbb
jdepend
classycle

Pure
175
965
642
1701
60
195
102
260

Ref
685
2711
3269
10957
249
1066
542
946

any
227 (33%)
630 (23%)
426 (13%)
1897 (17%)
31 (12%)
295 (28%)
95 (18%)
87 ( 9%)

rep
71 (10%)
104 ( 4%)
153 ( 5%)
122 ( 1%)
11 ( 4%)
74 ( 7%)
14 ( 3%)
11 ( 1%)

387
1977
2690
8938
207
697
433
848

peer
(56%)
(73%)
(82%)
(82%)
(83%)
(65%)
(80%)
(90%)

Time
11.3
18.2
22.9
119.7
4.1
13.6
7.2
9.9

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

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

36 / 46
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
OT の実験結果
<rep|_>

<own|_>

<p|_>

100%
90%
80%

70%
60%
50%
40%
30%
20%
10%
0%

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

38 / 46
OT の実験結果
Benchmark
Ref
<rep|_>
<own|_>
<p|_> <norep|_>
JOlden
685
67(10%/10%)
497(73%)
24(4%)
97(14%)
tinySQL
2711
224(8%/11%)
530(20%)
5(0%) 1952(72%)
htmlparser
3269 330(10%/11%)
629(19%)
36(1%) 2274(70%)
ejc
10957
467(4%/4%) 1768(16%)
50(0%) 8672(79%)
javad
249
44(18%/19%)
27(11%)
74(30%)
104(42%)
SPECjbb
1066 166(16%/16%)
141(13%)
71(7%)
688(65%)
jdepend
542 130(24%/25%)
156(29%) 128(24%)
128(24%)
classycle
946 153(16%/20%)
173(18%)
28(3%)
592(63%)
<rep|_> 列の2つ⽬の割合は理論上限, パラメーター数を増えても超えない

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

Ownership

⼿動
13(2)
215(7)
200(3)
592(5)
46(10)
73(6)
26(6)
90(10)

Time
10.3
18.4
33.6
122.4
5.5
17.1
13.7
11.7

2013 年 11 ⽉ 20 ⽇(⽊)

39 / 46
OT の実験結果に対する議論
• UT の結果に⽐べて rep の割合は⼤きいが, ⽐較は無意味 (後述)
• ⼿動で付ける型は 6 個/kLOC, 実⽤的
• 表での時間は⼿動で付ける必要がある型が与えた後、ツールをかける

時間のみ. ⼿動で選ぶ時間を計算すると,JOlden は約 10 分
間,SPECjbb は約 2 時間を掛かりました.
既存研究との⽐較は⾏われてない

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

40 / 46
UT と OT の⽐較: 所有権の割合
OT:rep
UT&OT:rep
31%

9%

UT:rep

5%

.
55%

Other
⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

41 / 46
UT と OT の⽐較
OT:
<rep|_> <rep|_> not <rep|_> not <rep|_>
UT:
rep
peer
rep
not rep
JOlden
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
オブジェクト所有権構造で OT は UT より深い例
オブジェクト図
.
root
i

k

OT のツリー
.
root
i

UT のツリー
.
root

k
i

j

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

j

k

j

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

43 / 46
オブジェクト所有権構造で UT は OT より深い例
オブジェクト図
.
root

UT のツリー
.
root

OT のツリー
.
root

x

x
x
c

c

i
c

i

e

e
⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

e

Ownership

i

2013 年 11 ⽉ 20 ⽇(⽊)

44 / 46
結論
Conclusion

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

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

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

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

• 「既存研究に対するメソット抽出リファクタリング」⾒たいな研究は初⾒
• 若⼲無理⽮理感をした
• 追加制約 B は UT のみ
• 型修飾⼦のサブタイプルールも UT のみ
• 純粋関数判定に依存するのも UT のみ

• と関わらず (書いてない

が)UT の⽅が優れる感
• 理解しやすい
• 最適解が保証される
• ⼿動関与は要らない

• 2つの⼿法を組み合わせによって, 既存研究より良い結果が期待され

ているが, そうでもなかった

⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研)

Ownership

2013 年 11 ⽉ 20 ⽇(⽊)

46 / 46
集合ベースの⼿法の性質
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

More Related Content

What's hot

Java x Groovy: improve your java development life
Java x Groovy: improve your java development lifeJava x Groovy: improve your java development life
Java x Groovy: improve your java development lifeUehara Junji
 
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築Tatsuya Tojima
 
2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用
2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用 2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用
2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用 Kenta Oono
 
パターン認識 08 09 k-近傍法 lvq
パターン認識 08 09 k-近傍法 lvqパターン認識 08 09 k-近傍法 lvq
パターン認識 08 09 k-近傍法 lvqsleipnir002
 
Scalaで型クラス入門
Scalaで型クラス入門Scalaで型クラス入門
Scalaで型クラス入門Makoto Fukuhara
 
はじめてのパターン認識 第5章 k最近傍法(k_nn法)
はじめてのパターン認識 第5章 k最近傍法(k_nn法)はじめてのパターン認識 第5章 k最近傍法(k_nn法)
はじめてのパターン認識 第5章 k最近傍法(k_nn法)Motoya Wakiyama
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門Hideyuki Tanaka
 
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章YOSHIKAWA Ryota
 
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと Haruka Ozaki
 
“Design and Implementation of Generics for the .NET Common Language Runtime”他...
“Design and Implementation of Generics for the .NET Common Language Runtime”他...“Design and Implementation of Generics for the .NET Common Language Runtime”他...
“Design and Implementation of Generics for the .NET Common Language Runtime”他...Masahiro Sakai
 
異常検知と変化検知 9章 部分空間法による変化点検知
異常検知と変化検知 9章 部分空間法による変化点検知異常検知と変化検知 9章 部分空間法による変化点検知
異常検知と変化検知 9章 部分空間法による変化点検知hagino 3000
 
Material
MaterialMaterial
Material_TUNE_
 
NIPS2013読み会:Inverse Density as an Inverse Problem: The Fredholm Equation Appr...
NIPS2013読み会:Inverse Density as an Inverse Problem: The Fredholm Equation Appr...NIPS2013読み会:Inverse Density as an Inverse Problem: The Fredholm Equation Appr...
NIPS2013読み会:Inverse Density as an Inverse Problem: The Fredholm Equation Appr...Kenta Oono
 
NIPS2013読み会:Inverse Density as an Inverse Problem: The Fredholm Equation Appr...
NIPS2013読み会:Inverse Density as an Inverse Problem: The Fredholm Equation Appr...NIPS2013読み会:Inverse Density as an Inverse Problem: The Fredholm Equation Appr...
NIPS2013読み会:Inverse Density as an Inverse Problem: The Fredholm Equation Appr...Kenta Oono
 

What's hot (16)

Java x Groovy: improve your java development life
Java x Groovy: improve your java development lifeJava x Groovy: improve your java development life
Java x Groovy: improve your java development life
 
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
 
2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用
2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用 2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用
2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用
 
パターン認識 08 09 k-近傍法 lvq
パターン認識 08 09 k-近傍法 lvqパターン認識 08 09 k-近傍法 lvq
パターン認識 08 09 k-近傍法 lvq
 
Scalaで型クラス入門
Scalaで型クラス入門Scalaで型クラス入門
Scalaで型クラス入門
 
はじめてのパターン認識 第5章 k最近傍法(k_nn法)
はじめてのパターン認識 第5章 k最近傍法(k_nn法)はじめてのパターン認識 第5章 k最近傍法(k_nn法)
はじめてのパターン認識 第5章 k最近傍法(k_nn法)
 
たのしい関数型
たのしい関数型たのしい関数型
たのしい関数型
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
 
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
 
“Design and Implementation of Generics for the .NET Common Language Runtime”他...
“Design and Implementation of Generics for the .NET Common Language Runtime”他...“Design and Implementation of Generics for the .NET Common Language Runtime”他...
“Design and Implementation of Generics for the .NET Common Language Runtime”他...
 
異常検知と変化検知 9章 部分空間法による変化点検知
異常検知と変化検知 9章 部分空間法による変化点検知異常検知と変化検知 9章 部分空間法による変化点検知
異常検知と変化検知 9章 部分空間法による変化点検知
 
Material
MaterialMaterial
Material
 
NIPS2013読み会:Inverse Density as an Inverse Problem: The Fredholm Equation Appr...
NIPS2013読み会:Inverse Density as an Inverse Problem: The Fredholm Equation Appr...NIPS2013読み会:Inverse Density as an Inverse Problem: The Fredholm Equation Appr...
NIPS2013読み会:Inverse Density as an Inverse Problem: The Fredholm Equation Appr...
 
NIPS2013読み会:Inverse Density as an Inverse Problem: The Fredholm Equation Appr...
NIPS2013読み会:Inverse Density as an Inverse Problem: The Fredholm Equation Appr...NIPS2013読み会:Inverse Density as an Inverse Problem: The Fredholm Equation Appr...
NIPS2013読み会:Inverse Density as an Inverse Problem: The Fredholm Equation Appr...
 
Linqことはじめ
LinqことはじめLinqことはじめ
Linqことはじめ
 

Viewers also liked

Active Refinement of Clone Anomaly Reports
Active Refinement of Clone Anomaly ReportsActive Refinement of Clone Anomaly Reports
Active Refinement of Clone Anomaly ReportsJiachen Yang
 
データモデルの更新を効率よく検証するの並列可能性
データモデルの更新を効率よく検証するの並列可能性データモデルの更新を効率よく検証するの並列可能性
データモデルの更新を効率よく検証するの並列可能性Jiachen Yang
 
チェックリストと分割に基づく 網羅と使用テスト
チェックリストと分割に基づく  網羅と使用テストチェックリストと分割に基づく  網羅と使用テスト
チェックリストと分割に基づく 網羅と使用テストJiachen Yang
 
Slides for Semantic Versioning versus Breaking Changes: A Study of the Maven ...
Slides for Semantic Versioning versus Breaking Changes: A Study of the Maven ...Slides for Semantic Versioning versus Breaking Changes: A Study of the Maven ...
Slides for Semantic Versioning versus Breaking Changes: A Study of the Maven ...Jiachen Yang
 
IEEE CCNC 2011: Kalman Graffi - LifeSocial.KOM: A Secure and P2P-based Soluti...
IEEE CCNC 2011: Kalman Graffi - LifeSocial.KOM: A Secure and P2P-based Soluti...IEEE CCNC 2011: Kalman Graffi - LifeSocial.KOM: A Secure and P2P-based Soluti...
IEEE CCNC 2011: Kalman Graffi - LifeSocial.KOM: A Secure and P2P-based Soluti...Kalman Graffi
 

Viewers also liked (6)

Active Refinement of Clone Anomaly Reports
Active Refinement of Clone Anomaly ReportsActive Refinement of Clone Anomaly Reports
Active Refinement of Clone Anomaly Reports
 
データモデルの更新を効率よく検証するの並列可能性
データモデルの更新を効率よく検証するの並列可能性データモデルの更新を効率よく検証するの並列可能性
データモデルの更新を効率よく検証するの並列可能性
 
チェックリストと分割に基づく 網羅と使用テスト
チェックリストと分割に基づく  網羅と使用テストチェックリストと分割に基づく  網羅と使用テスト
チェックリストと分割に基づく 網羅と使用テスト
 
Slides for Semantic Versioning versus Breaking Changes: A Study of the Maven ...
Slides for Semantic Versioning versus Breaking Changes: A Study of the Maven ...Slides for Semantic Versioning versus Breaking Changes: A Study of the Maven ...
Slides for Semantic Versioning versus Breaking Changes: A Study of the Maven ...
 
IEEE CCNC 2011: Kalman Graffi - LifeSocial.KOM: A Secure and P2P-based Soluti...
IEEE CCNC 2011: Kalman Graffi - LifeSocial.KOM: A Secure and P2P-based Soluti...IEEE CCNC 2011: Kalman Graffi - LifeSocial.KOM: A Secure and P2P-based Soluti...
IEEE CCNC 2011: Kalman Graffi - LifeSocial.KOM: A Secure and P2P-based Soluti...
 
Cloud sim report
Cloud sim reportCloud sim report
Cloud sim report
 

Similar to Inference and Checking of Object Ownership

[DL輪読会]Factorized Variational Autoencoders for Modeling Audience Reactions to...
[DL輪読会]Factorized Variational Autoencoders for Modeling Audience Reactions to...[DL輪読会]Factorized Variational Autoencoders for Modeling Audience Reactions to...
[DL輪読会]Factorized Variational Autoencoders for Modeling Audience Reactions to...Deep Learning JP
 
[DL輪読会]GQNと関連研究,世界モデルとの関係について
[DL輪読会]GQNと関連研究,世界モデルとの関係について[DL輪読会]GQNと関連研究,世界モデルとの関係について
[DL輪読会]GQNと関連研究,世界モデルとの関係についてDeep Learning JP
 
充足可能性問題のいろいろ
充足可能性問題のいろいろ充足可能性問題のいろいろ
充足可能性問題のいろいろHiroshi Yamashita
 
PyTorch, PixyzによるGenerative Query Networkの実装
PyTorch, PixyzによるGenerative Query Networkの実装PyTorch, PixyzによるGenerative Query Networkの実装
PyTorch, PixyzによるGenerative Query Networkの実装Shohei Taniguchi
 
多数のグラフからの統計的機械学習 (2014.7.24 人工知能学会 第94回人工知能基本問題研究会 招待講演)
多数のグラフからの統計的機械学習 (2014.7.24 人工知能学会 第94回人工知能基本問題研究会 招待講演)多数のグラフからの統計的機械学習 (2014.7.24 人工知能学会 第94回人工知能基本問題研究会 招待講演)
多数のグラフからの統計的機械学習 (2014.7.24 人工知能学会 第94回人工知能基本問題研究会 招待講演)Ichigaku Takigawa
 

Similar to Inference and Checking of Object Ownership (6)

第2回 NIPS+読み会・関西 発表資料 山本
第2回 NIPS+読み会・関西 発表資料 山本第2回 NIPS+読み会・関西 発表資料 山本
第2回 NIPS+読み会・関西 発表資料 山本
 
[DL輪読会]Factorized Variational Autoencoders for Modeling Audience Reactions to...
[DL輪読会]Factorized Variational Autoencoders for Modeling Audience Reactions to...[DL輪読会]Factorized Variational Autoencoders for Modeling Audience Reactions to...
[DL輪読会]Factorized Variational Autoencoders for Modeling Audience Reactions to...
 
[DL輪読会]GQNと関連研究,世界モデルとの関係について
[DL輪読会]GQNと関連研究,世界モデルとの関係について[DL輪読会]GQNと関連研究,世界モデルとの関係について
[DL輪読会]GQNと関連研究,世界モデルとの関係について
 
充足可能性問題のいろいろ
充足可能性問題のいろいろ充足可能性問題のいろいろ
充足可能性問題のいろいろ
 
PyTorch, PixyzによるGenerative Query Networkの実装
PyTorch, PixyzによるGenerative Query Networkの実装PyTorch, PixyzによるGenerative Query Networkの実装
PyTorch, PixyzによるGenerative Query Networkの実装
 
多数のグラフからの統計的機械学習 (2014.7.24 人工知能学会 第94回人工知能基本問題研究会 招待講演)
多数のグラフからの統計的機械学習 (2014.7.24 人工知能学会 第94回人工知能基本問題研究会 招待講演)多数のグラフからの統計的機械学習 (2014.7.24 人工知能学会 第94回人工知能基本問題研究会 招待講演)
多数のグラフからの統計的機械学習 (2014.7.24 人工知能学会 第94回人工知能基本問題研究会 招待講演)
 

Recently uploaded

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 

Recently uploaded (9)

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 

Inference and Checking of Object Ownership

  • 1. Inference and Checking of Object Ownership MD 輪講 博⼠後期課程 1 年 楊 嘉晨 ⼤阪⼤学⼤学院コンピュータサイエンス専攻楠本研究室 2013 年 11 ⽉ 20 ⽇(⽊) ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 1 / 46
  • 2. ⽬次 . . 背景 Introduction 1 . 所有権型システム の統⼀されたフレームワーク Unified Framework for Ownership Type Systems 2 . 型付けのラーキング Heuristic Ranking over Typings 3 . 統合した型推測 Unified Type Inference 4 . 実験結果 Empirical Results 5 ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 2 / 46
  • 3. 背景 Introduction ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 3 / 46
  • 4. 出典 Publication ECOOP 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
  • 5. オブジェクトの所有権 Object Ownership 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 class XStack{ Link top = null; void push (X d){ Link l = new Link(d); l.next = top; top = l; } static void main(){ XStack s = new XStack(); X x = new X(); s.push(x); } } class Link { Link next = null; X data; Link(X d) { data = d; } } ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) 参照 (reference) ̸= 所有関係 (ownership) . root . root s l Ownership x s x l 2013 年 11 ⽉ 20 ⽇(⽊) 5 / 46
  • 6. 所有権を表す型システム Ownership-like Type Systems type qualifier class type 変数の型は修飾⼦とクラス型の組み合わせで宣⾔するもの 1 . 1 public Object a 2 final Object b 3 @NotNull Object c 2 . 3 . ownership 可視性 可変性 Null 可能 type qualifier 今回議論するのは所有権を表す型の修飾⼦ 1 own Object o ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 6 / 46
  • 7. 背景 Introduction ownership-like type systems 既存の所有権型システム owner as modifier • Universe Types (UT) [8]: 所有者は変更者 [8] Dietl, W., Muller, P. “Universes: Lightweight ownership for JML”. Journal of Object Technology 4(8), 5–32 (2005) owner as dominator • Ownership Types (OT) [4]: 所有者は⽀配者 [4] Clarke, D., Potter, J.M., Noble, J. “Ownership types for flexible alias protection”. OOPSLA, vol. 33, pp. 48–64 (1998) . 型修飾⼦の⾃動推測 . • ⼿動に付ける苦労を削減 • 価値のある性質を明らかにする . ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership . ⾃動推測に難しいのは . 多数の型が可能の時, best typing 最適な型付けを決めること . 2013 年 11 ⽉ 20 ⽇(⽊) 7 / 46
  • 8. UT と OT のイメージ . root rep rep s rep . root rep <rep|_> <rep|_> <rep|_> s x1 x1 <rep|_> any x2 l1 peer <p|_> x2 l1 any <own|_> l2 ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) <p|_> l2 Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 8 / 46
  • 9. この研究の貢献 Contributions unified framework • 所有権型システムの統⼀されたフレームワーク • UT,OT をインスタンス化した • 最適な型付けを決めるヒューリスティックな⽅法 • 統合された型付けの推測⼿法 • 全⾃動的な最適 UT 推測 • ⼿動の型付けで半⾃動的な OT 推測 • 平均 6/kLOC の⼿動関与 • 実証的な評価 • 最⼤ 110kLOC の Java プログラム • UT と OT ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 9 / 46
  • 10. 所有権型システム の 統⼀されたフレームワーク Unified Framework for Ownership Type Systems ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 10 / 46
  • 11. A-正規形 Java ⽂法 [26] A-normal Form Java Syntax 説明するため、この⽂法を使います. 実装上, 普通の⽂法に対応できます cd fd md s class C extends D{fd md} τf τ m(τ x){τ y s; return y} 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
  • 12. 統⼀されたフレームワーク 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
  • 13. 視点適応関数: 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) = q1 typeof(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
  • 14. 共通する型制約 Unified Typing Rules . TWRITE . . TNEW . Γ(x) = qx Γ(y) = qy typeof(f) = qf qy <: qx ▷ qf B(TWRITETHIS) (qx , qf , qy ) Γ(x) = qx q <: qx B(TNEW) (qx , q) . Γ ⊢ x = new q C() . . TASSIGN . Γ ⊢ x.f = y . TWRITETHIS . Γ(x) = qx Γ(y) = qy qy <: qx B(ASSIGN) (qx , q) . . TREAD . . Γ ⊢ this.f = y ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) typeof(m) = q → q′ Γ(x) = qx Γ(y) = qy Γ(z) = qz qz <: qy ▷ q qy ▷ q′ <: qx B(TCALL) (m, qy , qx ) Γ(x) = qx Γ(y) = qy typeof(f) = qf qy ▷ qf <: qx B(TREAD) (qx , qf , qy ) . Γ ⊢ x = y.f . TREADTHIS . typeof(f) = qf Γ(y) = qy qy <: qf B(TWRITETHIS) (qf , qy ) Γ ⊢x=y . TCALL . . . TCALLTHIS . typeof(m) = q → q′ Γ(x) = qx Γ(z) = qz qz <: q q′ <: qx B(TCALLTHIS) (m, qx ) typeof(f) = qf Γ(x) = qx qx <: qf B(TREADTHIS) (qf , qx ) . Γ ⊢ x = this.f . Ownership Γ ⊢ x = y.m(z) Γ ⊢ x = this.m(z) 2013 年 11 ⽉ 20 ⽇(⽊) 14 / 46
  • 15. 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 ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) lost <: any Ownership OaM List ✗ ✓ ✓ ✓ ✓✗ Node . 視点適応関数 . peer rep _ . q ▷ ▷ ▷ ▷ peer peer any q′ = = = = peer rep any lost otherwise 2013 年 11 ⽉ 20 ⽇(⽊) 15 / 46
  • 16. 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 ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) lost <: any Ownership OaM List ✗ ✓ ✓ ✓ ✓✗ Node . 視点適応関数 . peer rep _ . q ▷ ▷ ▷ ▷ peer peer any q′ = = = = peer rep any lost otherwise 2013 年 11 ⽉ 20 ⽇(⽊) 15 / 46
  • 17. 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 ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) lost <: any Ownership OaM List ✗ ✓ ✓ ✓ ✓✗ Node . 視点適応関数 . peer rep _ . q ▷ ▷ ▷ ▷ peer peer any q′ = = = = peer rep any lost otherwise 2013 年 11 ⽉ 20 ⽇(⽊) 15 / 46
  • 18. 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 ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) lost <: any Ownership OaM List ✗ ✓ ✓ ✓ ✓✗ Node . 視点適応関数 . peer rep _ . q ▷ ▷ ▷ ▷ peer peer any q′ = = = = peer rep any lost otherwise 2013 年 11 ⽉ 20 ⽇(⽊) 15 / 46
  • 19. 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
  • 20. 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 } ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) 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 x l Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 17 / 46
  • 21. Ownership Types(OT)[4] owner as dominator expose 所有者は⽀配者: オブジェクトは所有者の外に出せない. . OaD QOT = {⟨q0 |q1 ⟩|q0 , q1 ∈ {rep, own, p}} List . rep this を表す ✗✗ ✓ ✓ ✓✓ own this の所有者を表す Node 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
  • 22. 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
  • 23. OT の視点適応関数 ⟨q0 |q1 ⟩ ▷ ⟨own|own⟩ = ⟨q0 |q0 ⟩ ⟨q0 |q1 ⟩ ▷ ⟨own|p⟩ = ⟨q0 |q1 ⟩ ⟨q0 |q1 ⟩ ▷ ⟨own|p⟩ = ⟨q1 |q1 ⟩ フィルドの型 (▷ の右) は rep を含む場合, 静的制約を破ります 1 2 3 4 5 6 7 class L { <rep|rep> C y; void main(){ x=y.f } } class C{ <own|p> F f; } ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) y.f の型修飾⼦は <rep|rep> になる Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 20 / 46
  • 24. OT の視点適応関数 ⟨q0 |q1 ⟩ ▷ ⟨own|own⟩ = ⟨q0 |q0 ⟩ ⟨q0 |q1 ⟩ ▷ ⟨own|p⟩ = ⟨q0 |q1 ⟩ ⟨q0 |q1 ⟩ ▷ ⟨own|p⟩ = ⟨q1 |q1 ⟩ フィルドの型 (▷ の右) は rep を含む場合, 静的制約を破ります 1 2 3 4 5 6 7 class L { <rep|rep> C y; void main(){ x=y.f } } class C{ <own|p> F f; } ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) y.f の型修飾⼦は <rep|rep> になる Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 20 / 46
  • 25. 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 } ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) 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 x l Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 21 / 46
  • 26. 型付けのラーキング Heuristic Ranking over Typings ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 22 / 46
  • 27. ⼀つのプログラムには多数の有効型付け案が可能 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 } ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) 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 x l Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 23 / 46
  • 28. ⼀つのプログラムには多数の有効型付け案が可能 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 } ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) 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 ゆるい型が付けられたら, 平坦なオブジェクト階 層になって, 全てのアクセスは許されてしまう Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 23 / 46
  • 29. ⼀つのプログラムには多数の有効型付け案が可能 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 } ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) 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 ゆるい型が付けられたら, 平坦なオブジェクト階 層になって, 全てのアクセスは許されてしまう Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 23 / 46
  • 30. 型付けにヒューリスティックなランキングの⽬的 主観的に:深いツリー構造で表す所有権がほしい objective function ランキング:ツリー構造の深さに影響する性質を⽬標関数o として定義し, そ の値を最⼤化する . valid typing 有効な型付け . P: プログラーム F: 所有権型システム TP,F : 型付け案 . ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) TP,F は有効: 全ての制約を満たす 若しプログラマーに⼿動でつけた型があると, それも制 約に含まれる Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 24 / 46
  • 31. 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
  • 32. OT の⽬標関数 oOT ベース修飾⼦のランキング {rep} > {own} > {p} . 辞書順は最適でないの例 oOT (⟨rep|rep⟩) ≯ oOT (⟨rep|p⟩) . . root . root m j i . root j i j i k m . k l m k l l′ l l′ i → m を rep にした場合 l′ k → l を rep にした場合 oOT (T) = (|T−1 (⟨rep|_⟩)|, |T−1 (⟨own|_⟩)|, |T−1 (⟨p|_⟩)|) ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 26 / 46
  • 33. 最⼤型付け Maximal Typing . 定義 1: 最⼤型付け . プログラム P と⽬標関数 o の型システム F に対し, 全ての有効な型付け T の内,   o を最⼤化した T は最⼤型付け. . UT に唯⼀な最⼤型付けが存在する . OT に異なる最⼤型付けが多数存在する . T1: 1 x = new X(); 2 y = new Y(); 3 x.f = y; 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
  • 34. 統合した型推測 Unified Type Inference ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 28 / 46
  • 35. 統合した型推測: 集合ベースの推測 Unified Type Inference: Set Based Solution (OT 等の型システムに対し) 全⾃動で型推測は不可能 → 協⼒的に半⾃動で型を推測 . キーアイデア: 集合ベースの推測 . 各 . 変数宣⾔に型修飾⼦の有効集合を求める . 集合のマッピング . SP,F は各変数宣⾔の型修飾⼦の有効集合 { {q} プログラーマーが v に⼿動つけた型修飾⼦ S0 (v) = QF 型修飾⼦の最⼤集合 . ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 29 / 46
  • 36. 統合した型推測: 集合ベースの推測 Unified Type Inference: Set Based Solution (OT 等の型システムに対し) 全⾃動で型推測は不可能 → 協⼒的に半⾃動で型を推測 . キーアイデア: 集合ベースの推測 . 各 . 変数宣⾔に型修飾⼦の有効集合を求める . 集合のマッピング . SP,F は各変数宣⾔の型修飾⼦の有効集合 { {q} プログラーマーが v に⼿動つけた型修飾⼦ S0 (v) = QF 型修飾⼦の最⼤集合 . ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 29 / 46
  • 37. 統合した型推測: 集合ベースの推測 Unified Type Inference: Set Based Solution (OT 等の型システムに対し) 全⾃動で型推測は不可能 → 協⼒的に半⾃動で型を推測 . キーアイデア: 集合ベースの推測 . 各 . 変数宣⾔に型修飾⼦の有効集合を求める . 集合のマッピング . SP,F は各変数宣⾔の型修飾⼦の有効集合 { {q} プログラーマーが v に⼿動つけた型修飾⼦ S0 (v) = QF 型修飾⼦の最⼤集合 . ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 29 / 46
  • 38. 統合した型推測: 集合ベースの推測 Unified Type Inference: Set Based Solution (OT 等の型システムに対し) 全⾃動で型推測は不可能 → 協⼒的に半⾃動で型を推測 . キーアイデア: 集合ベースの推測 . 各 . 変数宣⾔に型修飾⼦の有効集合を求める . 集合のマッピング . SP,F は各変数宣⾔の型修飾⼦の有効集合 { {q} プログラーマーが v に⼿動つけた型修飾⼦ S0 (v) = QF 型修飾⼦の最⼤集合 . ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 29 / 46
  • 39. 統合した型推測の⼿法 Architecture of Unified Type Inference ⼿動で型付け . 統合制約 集合ベース のソルバー {Q, <:, ▷, B} 最適型付 けを抽出 型の制約 をチェック ソースコード 最適型付け ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 30 / 46
  • 40. 伝達関数と不動点まで繰り返し Transfer Function and Fixpoint Iteration . 伝達関数 fs : S → S′ . 伝 . 達関数 fs は S に s ⽂の制約を破った型付けを削除 . 不動点まで繰り返し . 全ての伝達関数を以下の状況がでるまで S にかけて繰り返す 1 S は変わらない, 解に導いた . . 2. S にある変数の型集合は空, プログラームに型が⽭盾している ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 31 / 46
  • 41. 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 } ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 初期状態 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 } 2013 年 11 ⽉ 20 ⽇(⽊) 32 / 46
  • 42. 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 } ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 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 } 2013 年 11 ⽉ 20 ⽇(⽊) 32 / 46
  • 43. 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 } ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 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 } 2013 年 11 ⽉ 20 ⽇(⽊) 32 / 46
  • 44. 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 } ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership イテレーション 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 } 2013 年 11 ⽉ 20 ⽇(⽊) 32 / 46
  • 45. 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 17 s.push(x); 18 } 19 } ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) 最適化に選ばれた型 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 } X(); Ownership OT の推測例を省略 2013 年 11 ⽉ 20 ⽇(⽊) 32 / 46
  • 46. 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 17 s.push(x); 18 } 19 } ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) 最適化に選ばれた型 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 } X(); Ownership OT の推測例を省略 2013 年 11 ⽉ 20 ⽇(⽊) 32 / 46
  • 47. 実験結果 Empirical Results ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 33 / 46
  • 48. 実装と実験対象 既存ツールの Checker Framework[20,6] で実装した 実験対象 Benchmark JOlden tinySQL htmlparser ejc javad SPECjbb jdepend classycle #Lines 6223 31980 62627 110822 4207 12076 4351 8972 #Meths 326 1597 1698 4734 140 529 328 440 Description Benchmark suit of 10 small programs Database engine HTML parser Compiler of the Eclipse IDE Java class file disassembler SPECʼs benchmark for evaluating server side Java Java package dependency analyzer 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
  • 49. UT の実験結果 any rep peer 100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0% ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 35 / 46
  • 50. UT の実験結果 Benchmark JOlden tinySQL htmlparser ejc javad SPECjbb jdepend classycle Pure 175 965 642 1701 60 195 102 260 Ref 685 2711 3269 10957 249 1066 542 946 any 227 (33%) 630 (23%) 426 (13%) 1897 (17%) 31 (12%) 295 (28%) 95 (18%) 87 ( 9%) rep 71 (10%) 104 ( 4%) 153 ( 5%) 122 ( 1%) 11 ( 4%) 74 ( 7%) 14 ( 3%) 11 ( 1%) 387 1977 2690 8938 207 697 433 848 peer (56%) (73%) (82%) (82%) (83%) (65%) (80%) (90%) Time 11.3 18.2 22.9 119.7 4.1 13.6 7.2 9.9 (ちなみに私のツールで htmlparser の Stateful+Stateless の純粋関数は 543) ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 36 / 46
  • 51. 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
  • 52. OT の実験結果 <rep|_> <own|_> <p|_> 100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0% ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 38 / 46
  • 53. OT の実験結果 Benchmark Ref <rep|_> <own|_> <p|_> <norep|_> JOlden 685 67(10%/10%) 497(73%) 24(4%) 97(14%) tinySQL 2711 224(8%/11%) 530(20%) 5(0%) 1952(72%) htmlparser 3269 330(10%/11%) 629(19%) 36(1%) 2274(70%) ejc 10957 467(4%/4%) 1768(16%) 50(0%) 8672(79%) javad 249 44(18%/19%) 27(11%) 74(30%) 104(42%) SPECjbb 1066 166(16%/16%) 141(13%) 71(7%) 688(65%) jdepend 542 130(24%/25%) 156(29%) 128(24%) 128(24%) classycle 946 153(16%/20%) 173(18%) 28(3%) 592(63%) <rep|_> 列の2つ⽬の割合は理論上限, パラメーター数を増えても超えない ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership ⼿動 13(2) 215(7) 200(3) 592(5) 46(10) 73(6) 26(6) 90(10) Time 10.3 18.4 33.6 122.4 5.5 17.1 13.7 11.7 2013 年 11 ⽉ 20 ⽇(⽊) 39 / 46
  • 54. OT の実験結果に対する議論 • UT の結果に⽐べて rep の割合は⼤きいが, ⽐較は無意味 (後述) • ⼿動で付ける型は 6 個/kLOC, 実⽤的 • 表での時間は⼿動で付ける必要がある型が与えた後、ツールをかける 時間のみ. ⼿動で選ぶ時間を計算すると,JOlden は約 10 分 間,SPECjbb は約 2 時間を掛かりました. 既存研究との⽐較は⾏われてない ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 40 / 46
  • 55. UT と OT の⽐較: 所有権の割合 OT:rep UT&OT:rep 31% 9% UT:rep 5% . 55% Other ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 41 / 46
  • 56. UT と OT の⽐較 OT: <rep|_> <rep|_> not <rep|_> not <rep|_> UT: rep peer rep not rep JOlden 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
  • 57. オブジェクト所有権構造で OT は UT より深い例 オブジェクト図 . root i k OT のツリー . root i UT のツリー . root k i j ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) j k j Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 43 / 46
  • 58. オブジェクト所有権構造で UT は OT より深い例 オブジェクト図 . root UT のツリー . root OT のツリー . root x x x c c i c i e e ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) e Ownership i 2013 年 11 ⽉ 20 ⽇(⽊) 44 / 46
  • 59. 結論 Conclusion • 所有権型システムを推測と検証するための統⼀されたフレームワークを • • • • 提案した UT と OT の2つ既存の所有権型システムにインスタンス化した 有効な型付けのランキングを決めるヒューリスティックの⽅法 最⼤型付けの⾃動・半⾃動推測⼿法 実装して, 規模がある対象に UT と OT を実験した ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 45 / 46
  • 60. 論⽂を読んだ感想 上から⽬線で • 「既存研究に対するメソット抽出リファクタリング」⾒たいな研究は初⾒ • 若⼲無理⽮理感をした • 追加制約 B は UT のみ • 型修飾⼦のサブタイプルールも UT のみ • 純粋関数判定に依存するのも UT のみ • と関わらず (書いてない が)UT の⽅が優れる感 • 理解しやすい • 最適解が保証される • ⼿動関与は要らない • 2つの⼿法を組み合わせによって, 既存研究より良い結果が期待され ているが, そうでもなかった ⼤阪⼤学⼤学院 CS 専攻 楊 嘉晨 (楠本研) Ownership 2013 年 11 ⽉ 20 ⽇(⽊) 46 / 46
  • 61. 集合ベースの⼿法の性質 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