From: keiju@... (Keiju ISHITSUKA) Date: 1996-12-18T16:19:22+09:00 Subject: [ruby-list:1361] [Dist] distributed ruby けいじゅ@SHLジャパンです. ruby の ipc の機能は socket がありますが, この機能だけでは ruby らしく ないので, rpc の ruby版が作れるのかどうかプロトタイプを作っています. # これに関するメイルは, 多くなりそうなのでサブジェクトの頭に[Dist]をつ # けることにします. 目標としては, 通常のrubyのプログラムのままで分散処理ができるようにする ことです. まだプロトタイプですので, 実際に通信を行なっているわけではなくて, その 上のレイヤを検証しています. 実装はProxyを用いています. クライアント側では, サーバオブジェクトのプ ロキシを作りだし, そのプロキシに対してメッセージを送ると, プロキシがサー バオブジェクトに対してメッセージを送り直します. この時引数がある場合は, その引数をプロキシ化します. 引数がプロキシの場合で, 同じサーバ上のオブ ジェクトの場合は逆に非プロキシ化します. a # サーバX上のオブジェクト b # クライアントY側のオブジェクト Proxy(X, a).foo(b) --> a.foo(Proxy(Y, b)) a # サーバX上のオブジェクト b # サーバX上のオブジェクト Proxy(X, a).foo(Proxy(X, b) --> a.foo(b) こんな感じです. このプロトタイプを作っていて幾つか問題が明らかになってきました. 少し相 談にのって下さい. 1. ビルトインクラスのビルトインメソッドが引数をとる場合 例えば, a = Proxy(X, "foo") b = Proxy(X, "bar") a + b -> Proxy(X, "foobar") 上記のような処理は実現できます. この処理は サーバX上で処理が行なわれま す. サーバがことなる場合に困っています. a = Proxy(X, "foo") b = "bar" a + b -> Proxy(X, "foo") となってしまいます. これは, サーバXで a + Proxy(C, "bar") を実行しているためです. で``+'' 演算子がこのような処理を行なうわけですね. rubyで関数が記述されていれば問題ないのですが, ビルトインメソッドで引数 をとるものはこのような問題があることが分かりました. どうしたら良いと思います?? 2. マイグレーション 基本的にはProxyで良いと思っていますが, マイグレーションを行ないたい時 もあると思います. マーシャルを用いれば実現可能かと思ったのですが, マーシャルは任意のオブ ジェクトをマーシャル化できませんよね? 例えばクラスとか?? やはり無理で すかね?? 3. 即値 rubyでオブジェクトでないもの(アイデンティティがない)って, Fixnum, TRUE, FALSE, nilだけですか? __ .........................................石塚 圭樹@SHLジャパン(株)... ------------>アドレス変わりました!! e-mail: keiju@shljapan.co.jp <----