非明示的型付き デッドロックフリー プロセス計算 小林 直樹 斉藤 新 住井 英二郎 東京大学 並行プログラミング より優れた表現力 既存のシステムとの合致 並列 ・ 分散環境 本質的に並列性をもつアプリケーション ユーザ・インタフェース シミュレーション PPL2000 Short Presentation 並列プロセス計算のモデル 計算 [Milner et al. 92] の変種: チャネル間通信に基づく並行プロセス計算 new x in P x![c].P / x?[y].P P|Q *P if x then P else Q (channel creation) (output/input) (parallel execution) (replication) (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() in accept(ch) + n end ├ f: int -> int PPL2000 Short Presentation 型システムによるアプローチ 並行言語にはそのまま適用できない CML の例: fun f n = let val ch = channel() in accept(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].P a {, 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
© Copyright 2024 ExpyDoc