Loading article…
型理論では、セッション型は並行プログラムの正確性を保証するために使用されます。並行プログラム間で送受信されるメッセージが期待どおりの順序と型であることを保証します。[1] [2]セッション型システムは、チャネルシステムとアクターシステムの両方に適応されています。[3]
セッションタイプは、同時実行システムや分散システムにおいて望ましい特性、つまり通信エラーやデッドロックがないこと、プロトコルへの準拠を保証するために使用されます。[4]
バイナリ セッション タイプとマルチパーティ セッション タイプ
2つのプロセス間の相互作用はバイナリセッション型を使用してチェックできますが、3つ以上のプロセス間の相互作用はマルチパーティセッション型を使用してチェックできます。[5]マルチパーティセッション型では、すべての参加者間の相互作用はグローバル型を使用して記述され、その後、各参加者のローカルビューからの通信を記述するローカル型に投影されます。重要なのは、グローバル型が通信のシーケンス情報をエンコードすることです。これは、同じ通信をバイナリセッション型を使用してエンコードすると失われます。[6]
バイナリセッションタイプの正式な定義
バイナリセッションタイプは、送信操作( )、受信操作()、分岐()、選択()、再帰()、終了( )を使用して記述できます。[2]
たとえば、は、最初にブール値( ) を送信し、次に整数( ) を受信して、最後に終了する ( )セッション タイプを表します。
実装
セッション タイプは、次のような既存のプログラミング言語に合わせて調整されています。
- lchannels ( Scala ) [7]
- エッピ(スカラ)[7]
- STMonitor(Scala)[8]
- アンサンブルS [9]
- セッションタイプ(Rust)[10]
- セッシュ(Rust)[11]
- セッションアクター(Python)[12]
- 監視セッションErlang ( Erlang ) [13]
- FuSe ( OCaml ) [14]
- セッション-ocaml (OCaml) [15] [16]
- 優先度セッシュ(Haskell)[17]
- Java型状態チェッカー(Java)[18] [19] [20]
- スウィフトセッションズ(スウィフト)[21]
参考文献
- ^ ヒュッテル、ハンス;ラネーゼ、イワン。バスコンセロス、バスコ T.ケアレス、ルイス。カルボーン、マルコ。デニエロー、ピエール=マロ。モストルス、ディミトリス。ルカ、パドバニ。ラヴァラ、アントニオ。トゥオスト、エミリオ。ヴィエイラ、ウーゴ・トーレス。ザヴァッタロ、ジャンルイジ(2016年4月5日)。 「セッションタイプと行動契約の基礎」。ACM コンピューティング調査。49 (1): 3:1–3:36。土井:10.1145/2873052。hdl : 2381/38761。ISSN 0360-0300。S2CID 3580137。
- ^ ab Ancona, Davide (2016). プログラミング言語における動作型。マサチューセッツ州ハノーバー: Now Publishers。ISBN 978-1-68083-135-1. OCLC 1053840486.
- ^ ファウラー、サイモン、リンドレー、サム、ワドラー、フィリップ(2017年5月10日)。「メタファーの混合:チャネルとしての俳優と俳優としてのチャネル(拡張版)」。arXiv:1611.06276 [cs.PL]。
- ^ Scalas, Alceste; Yoshida, Nobuko (2018 年 6 月). 「Multiparty session types, beyond duality」. Journal of Logical and Algebraic Methods in Programming . 97 : 55–84. doi : 10.1016/j.jlamp.2018.01.001 . hdl : 10044/1/56777 . S2CID 48360420.
- ^本田 耕平; 吉田 信子; カルボーネ マルコ (2008)。 「マルチパーティ非同期セッションタイプ」。プログラミング言語の原理に関する第 35 回 ACM SIGPLAN-SIGACT シンポジウムの議事録。pp. 273–284。doi :10.1145/1328438.1328472。hdl :10044/1 / 26368。ISBN 9781595936899. S2CID 53038488。
- ^ 吉田 信子、ゲリ ロレンツォ (2019)。マルチパーティセッションタイプの非常に簡単な入門。ICDCIT 2020。doi :10.1007/978-3-030-36987-3_5。
- ^ ab 「Scalaでのセッションプログラミング」。alcestes.github.io 。 2021年11月2日閲覧。
- ^ “STMonitor”. chrisbartoloburlo.github.io . 2021年11月2日閲覧。
- ^ Harvey, Paul; Fowler, Simon; Dardha, Ornela; Gay, Simon J. (2021). 「アクター言語での安全なランタイム適応のためのマルチパーティセッションタイプ」. 35th European Conference on Object-Oriented Programming (ECOOP 2021) . 194 : 10:1–10:30. doi : 10.4230/LIPIcs.ECOOP.2021.10 . S2CID 234681015.
- ^ ジェスペルセン、トーマス・ブラハト・ローマン;ムンクスガード、フィリップ。ラーセン、ケン・フリス(2015年8月30日)。 「Rustのセッションタイプ」。ジェネリック プログラミングに関する第 11 回 ACM SIGPLAN ワークショップの議事録。 WGP 2015。コンピューティング機械協会。 13~22ページ。土井:10.1145/2808098.2808100。ISBN 9781450338103. S2CID 18320631。
- ^ Kokke, Wen (2019年9月12日). 「Rusty Variation: Rust における障害発生時のデッドロックフリーセッション」. Electronic Proceedings in Theoretical Computer Science . 304 : 48–60. arXiv : 1909.05970 . doi :10.4204/EPTCS.304.4. ISSN 2075-2180. S2CID 198166990.
- ^ 吉田 信子、ネイコバ ルミヤナ (2017 年 3 月 29 日)。「マルチパーティセッションアクター」。コンピュータサイエンスにおける論理的手法。13 ( 1) 。doi :10.23638/LMCS-13(1:17)2017。S2CID 65240382。
- ^ Fowler, Simon (2016 年8 月10日 ) 。「マルチパーティセッションアクターの Erlang 実装」。電子計算機科学論文集。223 : 36–50。arXiv : 1608.03321。doi : 10.4204 /EPTCS.223.3。ISSN 2075-2180。S2CID 418549 。
- ^ Padovani, Luca (2017). 「バイナリセッションのシンプルなライブラリ実装」. Journal of Functional Programming . 27 : e4. doi :10.1017/S0956796816000289. hdl : 2318/1634956 . ISSN 0956-7968. S2CID 19776781.
- ^ 今井 啓吾; 吉田 伸子; ユエン ショウジ (2019 年 3 月). 「Session-ocaml: 極性とレンズを備えたセッションベースのライブラリ」.コンピュータプログラミングの科学. 172 : 135–159. doi : 10.1016/j.scico.2018.08.005 . hdl : 10044/1/63748 . ISSN 0167-6423. S2CID 69673075.
- ^ 今井 圭吾. 「セッション OCaml」. www.ct.info.gifu-u.ac.jp . 2021年11月2日閲覧。
- ^ Kokke, Wen; Dardha, Ornela (2021年3月26日). 「Linear Haskellにおけるデッドロックフリーセッション型」. arXiv : 2103.14481 [cs.PL].
- ^ 「Java Typestate Checker」。GitHub。
- ^ バッキアーニ、ロレンツォ;ブラベッティ、マリオ。マルコ・ジュンティ;モタ、ジョアン。ラヴァラ、アントニオ(2022)。 「継承をサポートする Java 型状態チェッカー」。科学。計算します。プログラム。221 : 102844.土井: 10.1016/j.scico.2022.102844。hdl : 10362/145315。S2CID 250940803。
- ^ モタ、ジョアン;マルコ・ジュンティ;ラヴァラ、アントニオ(2021)。 「Java 型状態チェッカー」。COORDINATION 2021 の議事録。コンピューターサイエンスの講義ノート。 Vol. 12717。121–133 ページ。土井:10.1007/978-3-030-78142-2_8。ISBN 978-3-030-78141-5. S2CID 235383301。
- ^ Rubicini, Alessio; Padovani, Luca (2023). 「Swift Sessions: Swift でのバイナリセッションタイプのライブラリ実装」. GitHub .
