分散関数呼び出し

どう書く?.orgより http://ja.doukaku.org/45/

自分は、分散関数呼び出しといったら、

  1. クライアントが、関数をマーシャリングして、サーバに送る
  2. サーバがそれを受け取って、デマーシャリングして、評価して、結果をクライアントに返す

というものを想像する。
関数をマーシャリングするのは難しくて、というのも、その関数を取り巻く"環境"もマーシャリングしなければならないからだ。

どう書くの問題も、それをどうやるかという問題のはずなのに、寄せられている回答の中には、サーバのプログラムに関数定義が書いてあるものがある!
関数の送受信をしてないじゃないか。
計算を他のコンピュータにやらせるだけと勘違いしているんじゃないか。

で、Rhinoを最近試したというid:mzpさんに、こんなメッセージを送ってみた。

ちょっと、聞いて下さい。

「分散関数呼び出し」
http://ja.doukaku.org/45/nested/

普通、分散関数呼び出しっていえば、クライアント側で
eval_remote(host_addr, proc, argument0, argument1)
と呼ぶ、そのときにprocにこの問題の
function(x,y) {
return "販売価格 x*(1.0 - y / 100.0)円(定価x円からy引き)"
}
を与え、argument0やargument1に定価と割引率を与える、
と思うでしょう。

なのに、どいつもこいつも、
pricestring.cgi?x=2000&y=20
というCGIを作って10000回リロードする、みたいなことをやってる。
どう間違っても、サーバ側に関数定義があっちゃだめですよね。

Shiro氏のコードは随分マシで、
sshしてgoshを立ち上げて対話してる。最低限コレですよ。
ただ、Gaucheは関数をマーシャリングできないから、手でやってるのが玉にキズ。

で、ここからが本題なんだけど、
javascriptならproc.toSourceもevalもあるから、本物の分散関数呼び出しができるんじゃない?

やらないか?

"本物の分散関数呼び出し"はちょっと言いすぎだけど。

そうしたら、30分プログラムでやってくれました。ウホッ。すばらしい。
http://d.hatena.ne.jp/mzp/20070818/rpc