130 likes | 226 Views
非明示的型付き デッドロックフリー プロセス計算. 小林 直樹 斉藤 新 住井 英二郎 東京大学. 並行プログラミング. より優れた表現力 既存のシステムとの合致 並列 ・ 分散環境 本質的に並列性をもつアプリケーション ユーザ・インタフェース シミュレーション. 並列プロセス計算のモデル. 計算 [Milner et al. 92] の変種: チャネル間通信に基づく並行プロセス計算 new x in P (channel creation) x![c].P / x?[y].P (output/input)
E N D
非明示的型付きデッドロックフリー プロセス計算 小林 直樹 斉藤 新 住井 英二郎 東京大学
並行プログラミング • より優れた表現力 • 既存のシステムとの合致 • 並列 ・ 分散環境 • 本質的に並列性をもつアプリケーション • ユーザ・インタフェース • シミュレーション PPL2000 Short Presentation
並列プロセス計算のモデル • 計算 [Milner et al. 92] の変種:チャネル間通信に基づく並行プロセス計算 • new x in P(channel creation) • x![c].P/ x?[y].P(output/input) • P|Q(parallel execution) • *P (replication) • if x then P else Q (conditional branch) • x![c].P | x?[y].Q → P|{c/y}Q PPL2000 Short Presentation
並行計算の表現力 • 2値セマフォ • 関数サーバ • 並行オブジェクト PPL2000 Short Presentation
並行プログラムの安全性 • ネットワークからソフトウェアをダウンロード • 大規模な並列・分散システムでは全体のテストが困難 →安全性の保証が必要 PPL2000 Short Presentation
型システムによるアプローチ • 逐次言語に対しては成功 • 並行言語にはそのまま適用できない • CML の例:fun f n = let val ch = channel() inaccept(ch) + n end├ f: int -> int PPL2000 Short Presentation
型システムによるアプローチ • 並行言語にはそのまま適用できない • CML の例:fun f n = let val ch = channel() inaccept(ch) + n end├ f: int -> int(f 1) → 途中で停止 PPL2000 Short Presentation
並行プログラムの安全性 • 例:並行プログラムが意図した動作をするか • 関数サーバが値を返してくるか • ロックを獲得したプロセスはいずれロックを解放するか PPL2000 Short Presentation
既存の研究 • 線形チャネルプロセス計算[Kobayashi, POPL 96] • 部分的デッドロックフリープロセス計算[Kobayashi, TOPLAS 98] • チャネル使用法計算に基づく拡張[Sumii & Kobayashi, HLCL 98] • チャネルの使用方法を明示的にプログラマが指定 PPL2000 Short Presentation
非明示的型付けプロセス計算 • 構文通信にプログラマの意図を付加 • new x:[]t/U in P • x!a[y].P / x?a[y].Pa {, c, o, co}x?c[y].P 成功してほしい通信x?o[y].P いずれは実行されてほしい通信 PPL2000 Short Presentation
型推論の例 • 恒等関数のサーバ • new f in (*f?[n,r].r![n]| new c in f![3,c].c?c[x]) • 関数の返り値を受け取る通信は成功してほしい PPL2000 Short Presentation
型推論の例 • 恒等関数のサーバ • new f in (*f?[n,r].r![n]| new c in f![3,c].c?c[x]) • 型推論 → f:[int,[int]t1/Oo]t2/(*Io|Oc) c:[int]t1/(Ic|Oo) PPL2000 Short Presentation
結論と今後の課題 • 結論 • 非明示的型付けによる デッドロックフリープロセス計算および型推論アルゴリズムを考案 • SML/NJ による型検査器を実装http://www.yl.is.s.u-tokyo.ac.jp/~shin/pub/ • 課題 • 型システムの拡張 • 実際の並列言語 (Pict, CML, Java) への応用 PPL2000 Short Presentation