Lindaは、
Prolog、C、
Javaといった既存の逐次言語に並列処理機能を追加する、ユニークなアプローチを持つ
プログラミング言語です。一から並列処理を考慮して設計された言語とは異なり、既存言語の枠組みを維持したまま、並列処理を実現するという点に特徴があります。このため、Lindaは協調言語とも呼ばれ、複数の
プロセス間の連携に焦点を当てています。
並列処理におけるLindaの位置づけ
並列処理を
プログラミング言語で実現するには、大きく分けて三つのアプローチがあります。第一は、並列処理を言語設計の中核に据えた言語を開発する方法です。Occamなどがその例です。第二は、既存の言語に並列処理のための機能を追加して新しい言語を作る方法です。MultilispやConcurrent Smalltalkなどがこれに当たります。第三は、
コンパイラなどのレベルで並列化を行う方法です。
Lindaはこれらとは異なる第四のアプローチを取ります。それは、既存言語の仕様を変更することなく、タプルスペースという概念を用いて並列処理を実現する協調モデルを追加するというものです。既存のプログラムを書き換える必要がないため、既存の
ソフトウェア資産を活用しつつ、並列処理の恩恵を受けることができます。
タプルスペースと基本操作
Lindaの中核となる概念はタプルスペースです。これは、共有メモリのような役割を果たし、型付きデータレコード(タプル)を格納する空間です。
プロセスは、以下の五つの基本操作を用いてタプルスペースとやり取りします。
out: タプルをタプルスペースに出力します。
in: タプルスペースからタプルを削除して取得します。指定したタプルが存在しない場合は、
プロセスはブロックされ、タプルが利用可能になるまで待ちます。
rd: タプルスペースからタプルをコピーして取得します。inと同様に、指定したタプルが存在しない場合はブロックされます。
inp: inと同様ですが、ブロックされません。指定したタプルが存在しない場合はエラーを返します。
*
rdp: rdと同様ですが、ブロックされません。指定したタプルが存在しない場合はエラーを返します。
タプルの取得は、タプルのフィールドの一部を指定して行うことができます。これは一種の連想メモリのような働きをし、異なる
プロセス間でも効率的なデータ交換を可能にします。
歴史と実装
Lindaは、1986年にAT&Tベル研究所のSudhir Ahuja、
イェール大学のDavid Gelernter、Nicholas Carrieroによって開発されました。「協調言語」という用語は、1992年のGelernterとCarrieroの論文で初めて使われました。彼らは並列プログラミングを、計算アルゴリズムと
プロセス間の協調という二つのモデルに分けて考えていました。
当初は注目を集めたLindaでしたが、1990年代半ばには注目度が低下しました。しかし、1990年代後半からは
[Java]]への実装例が登場するなど、再び注目を集めています。現在では、Prolog、
Ruby]、C、
[C++]]、[[Java]、そしてPython(PyLinda)など、様々な言語への実装例が存在します。さらに、Easeのように、Lindaをベースとした独立した言語も開発されています。なお、Lindaという名前は、映画『ディープ・スロート』の主演女優リンダ・ラブレースに由来すると言われています。
まとめ
Lindaは、既存言語の機能拡張というユニークなアプローチによって並列処理を実現する協調言語です。タプルスペースとシンプルな操作によって、複数の
プロセス間の協調動作を容易に実現できるため、複雑な並列プログラムの開発を簡素化することができます。様々な言語への実装例が存在することからも、その有用性が広く認識されていると言えるでしょう。将来的には、ますます複雑化する
ソフトウェア開発において、Lindaのような協調言語の重要性が増していくことが予想されます。