出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2017/05/03 04:48 UTC 版)
| パラダイム | 並行論理プログラミング |
|---|---|
| 登場時期 | 1989年 |
| 設計者 | K. Mani Chandy、Stephen Taylor 他 |
| 型付け | 静的型付け、動的型付け |
| 影響を受けた言語 | Strand、PARLOG、Guarded Horn Clauses |
| 影響を与えた言語 | CC++ |
PCN (Program Composition Notation)はK. Mani ChandyとStephen TaylorがStrandの設計者であるIan Fosterの協力を受けて設計した、複数のプログラムを並列環境や分散環境で組み合わせるためのプログラミング言語である[1]。それまでの並行論理プログラミング言語の技術要素に、手続型言語の変数や{}をつかったブロック表現などを取り入れたプログラミング言語で、C言語やFortranのプログラムを呼び出すことができた。
PCN (Program Composition Notation)は並行論理プログラミングでのガードや論理変数による通信と同期の仕組みをそのまま流用しながら、通常の手続型言語であるC言語などの要素を取り入れたプログラミング言語である。言語の基本的な部分はIan FosterやStephen Taylorが設計したStrandの影響を大きく受けているが、その構文はC言語風の{}によるブロック構造を持っている。C言語やFortranのプログラムとPCN自身のプログラムを組み合わせ、並列環境や分散環境で動くより大きなプログラムを構築するために設計された。PCNはアルゴンヌ国立研究所とカリフォルニア工科大学で開発され、UNIXワークステーションやBBN Butterflyなどの商用の並列コンピュータ上にインプリメントされた。
PCNの特徴は以下の通りである[2]。
{; .., ... }、{|| .., ... }、{? ..-> .., ..-> .., ... }の形式で表現される。選択(choice)ブロックはエドガー・ダイクストラのガード付きコマンドと同様、ガードの条件を満たした文のみが実行される。
可変変数 m の内容がリスト x の要素であれば true(1) を、そうでなければ false(0) を返すプログラムの例を以下に示す。
member(x,m,r)
int m, r;
{? x ?= [] -> r:= false,
x ?= [vlxs], v == m -> r:= true,
x ?= [vlxs], v != m -> member(xs, m, r)
}
二分木(バイナリツリー)t の高さ z を求めるプログラムの例を以下に示す。ツリーの要素は {left, val, right} か空のタプルで表現されているものとする。各枝の深さは並行して計算され、定義変数 l と r によりheightの実行とzの計算との同期が行われる。
height(t,z)
{? t ?= { } -> z = 0,
t ?= {left, val, right} -> {|| height(left, l), height(right, r),
{? l >= r -> z = 1 + l,
r >= l -> z = 1 + r
}
}
}
固有名詞の分類
| プログラミング言語 |
D言語 シーケンシャル・ファンクション・チャート Program Composition Notation XQuery Standard ML |
| 並列コンピューティング |
対称型マルチプロセッシング 並列化 Program Composition Notation ILLIAC IV 分散コンピューティング |
| 並行計算 |
Earliest Deadline First Strand Program Composition Notation 動的データ交換 ThreadWeaver |