|
Occamは、並行プログラミング言語である。CSPに基づいており、多くの機能はCSPから由来している。Occamという名称はオッカムのウィリアムの「オッカムの剃刀」から来ている。OccamはCSPの実用的な実装と言うこともできる。 並行向け以外の部分は手続き的(ないし命令的)である。INMOS社が同社のトランスピュータのために開発したが、他のプラットフォームへの移植もされている。現在使われているものでは、XMOS(:en:XMOS)のXC(:en:XC (programming language))がOccamの影響を受けた言語である。 == 概要 == 以下の例で、インデントとフォーマットはコードを解析する上で重要である。 式は改行によって完結する。式を羅列する場合はインデントが同じでなければならない(オフサイドルール)。 プロセス間の通信はチャネルを通して行われる。あるプロセスがチャネルにデータを出力する場合 ! を使い、チャネルからデータを入力するには ? を使う。入出力は通信相手がレディ状態となってデータ送受信が可能になるまでブロックされる。 以下の例では、 c が変数、keyboard と screen がチャネルを示している。 keyboard ? c screen ! c SEQはそれに続く式のリストを逐次的に実行することを示す。他のプログラミング言語のように逐次実行が暗黙のうちに採用されることはない。以下の例で「:=」は代入である。 SEQ x := x + 1 y := x * x PARはそれに続く式のリストを並列的に実行してもよいことを示す。 PAR x := x + 1 y := y * 2 ALTは選択実行を可能とする。ガード部をもつコマンドのリストが後に続き、ガード部はboolean値を返す条件式と入力チャネル式(どちらも省略可能)から成る。各ガードは条件が真でかつ入力チャネルから入力があったときに成功する。実行時には複数のガードが同時に成功してもかまわない。 ALT count1 < 100 & c1 ? data SEQ count1 := count1 + 1 merged ! data count2 < 100 & c2 ? data SEQ count2 := count2 + 1 merged ! data status ? request SEQ out ! count1 out ! count2 この例は c1 および c2 のチャネルからデータを読み込んで、ひとつの merged というチャネルにそれを渡すものである。 countN が 100 になると、対応する入力チャネルからの入力は受け付けなくなる。status チャネルからリクエストがあると、c1 および c2 から何回データを受け取ったかが out チャネルに出力される。 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「Occam」の詳細全文を読む スポンサード リンク
|