分散関数呼び出し
どう書く?.orgより http://ja.doukaku.org/45/
自分は、分散関数呼び出しといったら、
- クライアントが、関数をマーシャリングして、サーバに送る
- サーバがそれを受け取って、デマーシャリングして、評価して、結果をクライアントに返す
というものを想像する。
関数をマーシャリングするのは難しくて、というのも、その関数を取り巻く"環境"もマーシャリングしなければならないからだ。
どう書くの問題も、それをどうやるかという問題のはずなのに、寄せられている回答の中には、サーバのプログラムに関数定義が書いてあるものがある!
関数の送受信をしてないじゃないか。
計算を他のコンピュータにやらせるだけと勘違いしているんじゃないか。
で、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