Linda

Linda は、並列プログラミング言語であり、Prolog、C言語、Javaなどの他の（逐次的）言語上に拡張として実装される。

概要 
並列処理とプログラミング言語の関わりを考えたとき、いくつかの手法が考えられる。まず、言語を並列処理向きに一から設計する手法である。例えば、CSPに基づいた Occam などがある。第二に既存の言語に並列処理モデルを導入して新たな言語を構築する手法である。例えば、Multilisp、Concurrent Smalltalk などがある。第三に並列化を言語仕様とは別の部分で実現する手法である。例えば、コンパイラによって並列処理を実現する。

Linda はこれらとは異なるアプローチであり、既存の言語仕様に修正を加えずに協調モデル（coordination model）を付加することで並列処理を実現する。このため Linda は「協調言語（coordination language）」とも呼ばれ、並列性のない言語で書かれたアプリケーション間の協調動作にのみ注目している。Linda のモデルでは、タプルスペース（tuplespace）と呼ばれる概念上の共有メモリ上で型つきのデータレコード（タプル）をそこに格納する。タプルスペースは以下の5つの単純な操作でアクセスされる。

out プロセスからタプルスペースにタプルを出力する。
in タプルスペースからタプルを削除し、それをプロセスに返す。必要なタプルが見つからない場合はブロックされ、待つことになる。
rd タプルスペースからタプルをコピーし、それをプロセスに返す。必要なタプルが見つからない場合はブロックされ、待たされる。
inp in のブロックされない形式。必要なタプルがない場合はエラーを返す。
rdp rd のブロックされない形式。

タプルスペースからタプルを取り出す操作は、一種の連想メモリのように行う。つまり、タプルの一部のフィールドの値を指定して、それにマッチするタプルを取り出す。これにより、本来関係のないプロセス間でデータをやり取りできる。

歴史と実装 
AT&Tベル研究所のSudhir Ahujaがイェール大学の David Gelernter と Nicholas Carriero と共に1986年に開発した。協調言語（coordination language）という用語は1992年の彼らの論文で初めて使われた。彼らは並列プログラミングを、計算のアルゴリズムを扱う計算モデルと、プロセス間の通信や同期を扱う協調モデルに分けて考えた。当初、注目を浴びた Linda だが、1990年代半ばには興味が薄れていた。しかし、1990年代後半になって、Java に Linda を実装する例が見られるようになった。

Linda の実装としては、Prolog、Ruby（Rinda）、C言語、C++, Java（サン・マイクロシステムズが Java 向けに Linda を規定した JavaSpaces 仕様）などがある。IBMも似たような仕様として TSpaces を持っている。

また、Linda を独立した言語処理系として実装する者も出てきた。例えば、Ease という言語は Steven Ericsson-Zenith が設計した Linda 風の並列処理言語である。

言語の名称は、Ada がエイダ・ラブレスにちなんでいるのにあやかって、ポルノ映画『ディープ・スロート』の主演女優リンダ・ラブレースにちなんだものだという。

参考文献

脚注

外部リンク 
 Linda for Prolog
 Linda for C
 Linda for Java
 Rinda (for Ruby)
 PyLinda for Python
Linda for C++

並列コンピューティング
プログラミング言語