| パラダイム | 同時制約ロジック |
|---|---|
| デザイン: | ケン・カーンとビジェイ・A・サラスワット |
| 初登場 | 1990 |
| 主な実装 | |
| (利用可能なものはありません) | |
Janus は、1990 年に K. Kahn と Vijay A. Saraswat によって論文「並行制約 (論理) プログラミングの特殊なケースとしてのアクター」で部分的に説明されたコンピュータ プログラミング言語です。 [1]これは、バックトラックのない並行制約言語です。
Janus は、バッグ チャネルを使用して並行性をモデル化します。プロセスにメッセージを送信する必要があるコードは、バッグを別のバッグとメッセージのシングルトン バッグの結合に制約することによってこれを実行します。その後、別のバッグは、後続のメッセージを送信するために制約できるようになります。
プロセスは、バッグを、それが何らかのシングルトンと何らかの他のバッグとの結合であることを示すパターンと照合することによってメッセージを受信します。バッグ チャネルのロジックは、アクター モデルに共通する特性、つまりメッセージの到着順序が保証されないという特性を生み出します。ただし、アクター モデルのアクターとは異なり、Janus のプロセスは、バッグの形でいわば「メールボックス」を渡すことができ、複数のメールボックスを保持できます。メールボックスを渡して複数のメールボックスを保持するこの機能は、Janus の影響を受けていたコンピューター プログラミング言語ToonTalkに継承されています。
プログラミング言語 Janus は、2 つの顔を持つローマの神Janusにちなんで名付けられました。Janus のすべての論理変数には、引数として渡すことができる 2 つの側面である 2 つの「顔」があるためです。これらはaskerとtellerと呼ばれます。これらはそれぞれ、変数の値 (または値の何らかの特性) を尋ねる権利と、値を伝える権利 (または値が何であるかに関する何らかの制約を伝える権利) を表します。asker と teller の側面は、互いに独立して引数として渡すことができます。どちらの権利も、もう一方の権利を意味するものではありません。言語の構文は、teller をコピーしたり、複数回実行したりすることを防止します。Kahn と Saraswat によると、論理的な矛盾は静的に防止されます。
参考文献
- ^ Kahn, K.; Saraswat, Vijay A. (1990 年 10 月 1 日). 「同時制約 (論理) プログラミングの特殊なケースとしてのアクター」. ACM SIGPLAN Notices . 25 (10): 57– 66. doi :10.1145/97946.97955 . 2019 年10 月 29 日閲覧。
- VA Saraswat、KM Kahn、J Levy (1990)。「Janus: 分散制約プログラミングへの一歩」NACLP。
- VA Saraswat、M Rinard、P Panangaden (1991)。「並行制約プログラミングの意味論的基礎」POPL。
- David Gudeman、Koenraad De Bosschere、Saumya K. Debray (1992)。「jc: Janus の効率的で移植可能な順次実装」。論理プログラミングに関する合同国際会議およびシンポジウムの議事録。
