2009年8月8日土曜日

分散プログラミング

どう書く?のお題の分散関数呼び出しがちょうどぴったりだったので、
Limboで書いてみました。

分散関数呼び出し
http://ja.doukaku.org/comment/9449/

リンク先には説明を入れませんでしたが、次のような方針です

・サーバーでは仮想ファイル(synthetic file)を用意する。
 このファイルに対し、リードしたりライトすることで、処理を実行させることが出来る。
 (今回の例では数字をライトすると、整形した文字列がリードできる)

・クライアントではサーバーのファイルをマウントし、そのファイルに対し読み書きを行う。
 こうすることで、実際の演算はサーバー側で行われ、クライアントでは結果の収集のみが行える。

これは面白い。

ポイントは、
・#sをbindしなければならない。#sという特殊なシンボルをsynthetic fileを置こうとするディレクトリにbindする。
・sys->file2chanでsynthetic fileを生成する。
・file2chanは戻り値がFileIO型だが、そのread, writeというメソッドで、
 そのファイルに書き込みが行われたとき、あるいは読み込みが行われたときの
 処理を記述する。

その他わかったこと

・サーバーとクライアントの通信プロトコルはstyxと呼ばれ、mount サーバーホスト名 マウントポイント という処理を行えば、サーバーのネームスペースをクライアントの特定のディレクトリにマウントできるようだ。
・altというのはcaseと似ているが、数値ごとの処理わけを記述するのではなく、チャネルごとの処理わけを記述する。列挙したチャネルのどれかでイベントが発生したらブロックの中の処理に移行するが、それまでは待ち状態になる。(selectにあたる?)


alt{
<- channel1 =>
# channel1のイベントが発生した時の処理
<- channel2 =>
# channel2のイベントが発生したときの処理
}


Limbo/TkでGUIプログラムを書く場合、イベント待ちのループを書く必要があり(マウスのクリックとか)、その場合にaltを使うようだ。

・定数の記述はcon


変数名 : con 初期化データ;

0 件のコメント:

コメントを投稿