論文紹介 jcc:Timed Default cc Programming in JAVA

論文紹介
jcc:Timed Default cc
Programming in JAVA
若槻聡一郎
Javaにおける並行プログラミング
スレッド、共有ヒープ、分割スタック
 共有ヒープ内の可変オブジェクトのロックに基
づく同期
 スレッド特有のデータ構造(ヒープキャッシュ、
スタック)と共有ストア間の情報の流れを組織
するためのルール

Javaにおける並行プログラミング

不幸なことに現在の仕様は理解するのが困
難でしばしば意図しない関わりがある…現存
する仕様の中ではいくつかの大切な点に関し
て議論されていない
Javaにおける並行プログラミング
Javaでは実行が並行に行われるのはデフォ
ルトである
 Javaコードの全ての行は同一オブジェクト内
のマルチスレッドによって並列に実行される

Jccのモデル
jcc=
JAVA
−Threads
+Vats
+Promises
+Agents
Jccの設計目標
•
•
•
•
Javaとの相互運用性:ソースコード、Java仮
想マシン、型体系
新たな制約システムを付加するための、プ
ログラマ用のAPI
メタプログラミングの反映の提供
実装は中くらいのサイズのプログラムへの
使用に適しているべきである
残りの話


銀行のアプリケーションの例
Jccの設計の要素
銀行のアプリケーション
引き出し
預金
銀行のアプリケーション:引き出し

残高が十分にある場合には引き出しが成功
する
もし残高が十分でない場合には、n回の預金
のあとに引き出しを繰り返す。もし残高がまだ
十分でなければ、引き出しは拒否される。
The bank application
Account1
(zero)
Withdrawal
Ravi
suspend
Deposit(100) suspend
Account2
The bank application
25
Account1
(25)
Withdrawal
Ravi
suspend
Deposits
Deposit(100) suspend
Account2
The bank application
25 each
Account1
(100)
Withdrawal
Ravi
Deposits
Deposit(100)
Account2
Rest of the talk


An example Bank application
The design elements of Jcc.
Vats and ports
Ports
Local stack/heap
Stack
Single threaded
Heap
JVM =
Multiple vats
+
Shared heap of
immutable
objects
Communication: Ports
各々のportはvatにおかれそのvatによっての
に読み出されるEach port is located at a vat
and is “read” only by code at that vat
 各々のportは他のvatに複数のwriterとteller
を持つことができる
 Portに書き込まれたオブジェクトは元のvatか
ら対象のvatにコピーされる

Vats and ports in the bank
application
Account1
(zero)
Withdrawal
Ravi
suspend
Deposit(100) suspend
Account2
Vatにおける実行
他のメッセージを受け取る前にそのときのメッセ
ージの処理を終える:
・新たなローカルヒープオブジェクトを作る
・ヒープ内のメソッドを呼び出す
・他のvat内のportにオブジェクトを送る
これらの命令はすべてブロックされない
制限された応答は保証される?
論理的時間
A logical time-step:
receive input
compute response
束縛された応答が保証されうる状況下では物
理的時間に相当する cf. Esterel.
Logical time in the bank application
Account1
(zero)
Withdrawal
Time steps:
0. Withdrawal(100)
1. Deposit(25)
2. Deposit(25)
3. Deposit(25)
4. Deposit(25)
Time based control constructs
1)
next {S}. Sがストアに入れられ、次の時間
における実行がなされる
2)
always {S}: 全ての時間でSを実行する
Oops! 同じ時間にたくさんのプログラムが実行
されうるではないか!
Mutiple programs in the Account1
vat of the bank application
Account1
(zero)
Withdrawal
Time steps:
0. Withdrawal(100): “withdrawal code”
1. Deposit(25):
“withdrawal, deposit code”
2. Deposit(25):
“withdrawal, deposit code”
3. Deposit(25):
as above
4. Deposit(25):
as above
Vat間の通信用の制約Constraints
for Intra-Vat communication
決定の並行の達成方法は?
並行制約プログラミングだ!
How to achieve determinate concurrency?
Concurrent constraint programming!
Store
Jccにおける制約ストア
各々のvatは個々に制約ストアをもつ
 ストア内にある全てのアイテムはその時間の
終わりまでに実行される:プログラマはnextを
明示して使用してアイテムを次の時間に運ぶ
 JccにおけるPromise(=型付けされた論理変
数)用の制約

Promises
Jccのpromise = Javaのjava.lang.Object
次の4つの状態を持つ
1. Unrealized and unwatched. [new variables]
2. Realized
[new constants]
3. Bound
[o.equate(p) ]
4. Unrealized and watched
Watchers for promises

When (p) do S
pがrealizedになったらSを実行する
そうでなければp上でSの実行が一時停止さ
れる。Sはpのためのwatcherである

p.equate(q)の効果って??
Watchers for promises

every (p) do S
pがrealizedになった全ての時間でSを実行す
る
Code for Account
public BankAccount() {
every (balanceUpdate) {
// check if pending withdrawals
// can be satisfied
}
Code for Account
public Confirmation deposit(Integer amount){
Confirmation result = new Confirmation();
when (amount) {
// update balance
result.equate(“Success”);
}
return result;
}
Code for Account
public Confirmation withdraw(Integer amount){
Confirmation result = new Confirmation();
when (amount) {
// check balance
// if balance sufficient
result.equate(“Success”);
//if balance not sufficient, add to pending list
}
return result;
}
Conclusions
jcc=
JAVA
−Threads
+Vats
+Promises
+Agents
Full power of Timed Default cc in Java.