マルチコア化の進展でどうやって並列化されたプログラムを能率的に開発するかというのが一つのトピックになっています。実際問題、どうするのかというのは幾つかのアイディアが提起されてきたジャンルであるかと思います。古くはトランスピュータとOccamでしょう。トランスピュータは並列コンピューティング向けに考案されたプロセサであり、Occamはそのトランスピュータ上で動くコードを作るための言語です。
Occamは言語使用としてスレッド的な機能を持っているのでOccamで書かれたコードは半ば自動的にマルチスレッドになります。例えば、
PAR x := x + 1 y := y * 2
この例のようなコードだとxに1を足すという動作とyを2倍する動作が並列して実行されます。C言語などの言語仕様に並列化を含まない言語と異なり、並列化を特別視せずにプログラミングすることが可能な仕様となっています。 勿論、80年代当時の言語であるので現在主流のオブジェクト指向の言語群と異なりクラスなどの機能を持ってはいませんが当時としては極めて先進的な思想であったのは確かです。
時代は下って、2002年にMicrosoft ResearchのNick Bentonらによって発表されたPolyphonic C#という言語も独特な並列化プログラミングを見通した仕様を持っています。Polyphonic C#はC#の拡張仕様の一つでプレビュー版が公開されたCωの実験的な実装に仕様が取り込まれています。特徴としては関数の非同期呼び出しとChordという独特のSynchronize patternの記述によって簡便に並列化と同期を記述することが出来ることです。
async postEvent(EventInfo data) {
// large method body
}
この例のようなコードだとpostEventというメソッドは処理の終了を待たずに呼び出し元に制御を戻します。Polyphonic C#もスレッドを明示的に用いなくてもプログラムをマルチスレッドか出来ると考えていいでしょう。


コメントする