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
quali?er
class type
変数の型は修飾?とクラス型の組み合わせで宣?するもの
1
.
1 public
Object a
2 final
Object b
3 @NotNull Object c
2
.
3
.
ownership
可視性
可変性
Null 可能
type quali?er
今回議論するのは所有権を表す型の修飾?
1 own
Object o
?阪?学?学院 CS 専攻 楊 嘉晨 (楠本研)
Ownership
2013 年 11 ? 20 ?(?)
6 / 46
7. 背景
Introduction
ownership-like type systems
既存の所有権型システム
owner
as
modi?er
? 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 ?exible 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
15. Universe Types (UT)[8,5]
owner
as
modi?er
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
modi?er
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
modi?er
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
modi?er
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 ?exible 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
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
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
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
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