メイン

1章 アーカイブ

2007年09月05日

1章.分散オブジェクトシステムdRuby

本編「1章.分散オブジェクトシステムdRuby」に入ります。ふむふむ、dRubyは“分散オブジェクトシステム”というものであると。

  1. 今までになかったのか
  2. では分散オブジェクトシステムって何だ、今までになかったのか、と言う疑問がわきますが、それは「1.2 RPCとRMI」付近に書かれています。図があってわかりやすいです。なるほど、RPCは外部へ呼び出しを委譲するだけで状態を持たないということかしら。それがRMIとかだと、ライフサイクルの長いオブジェクトが扱えるということですね。で、分散オブジェクトシステムとはRMIのようなものだということか。ということで「1.4」「1.5」あたりへ読み進める。

  3. dRubyはどうすごいのか
    • 対象をRubyに限定している
    • 100%Rubyで書かれている
    • IDL不要

    1.5 dRubyの特徴

    プロセス間のやり取りに、OSに依存する仕組みを使わずRubyで実装しているのでRubyが動く環境であればどこでも動くと言うことがすごいのかな。で、IDL不要と。

    Rubyの変数には型がなく、継承関係を利用した代入原則がありません

    1.5.2 Rubyの特徴そのままに

    対偶ぽくすると、“JavaやC++の変数には型があり、継承関係を利用した代入原則があります”とも言いかえられそう。「継承関係を利用した代入原則」とは、変なもの{を|に}入れるとClassCast例外が出るアレのことですねおそらく。変数に型があると、任意のものを何でも入れられるわけではないし、型を知らないものは使えない。と言うことだと思いました。対して、変数に型がない場合は何でも使えるようになるのでIDLも要らなくなるということですね。で、dRubyはそっち系だということか。

    そういえば、Java RMIで、とりあえずやってみる手順としては


    1. どこかにRMIレジストリサーバーを立てる(rmiregistry)

    2. ポリシーファイルを作る(java.policy)

    3. リモートオブジェクトを提供するプロセスやリモートオブジェクトを使うプロセスを動かす

    となりますが、それほど面倒ではないと思います。私はこの手順くらいなら許容できます。しかし、RMIでは共有しようとするオブジェクト(のクラス)に対して以下のような制限があります

    • 共有するオブジェクト(のクラス)は、java.rmi.Remoteインタフェースを継承したインタフェースをインプリしていること

    • 共有するオブジェクト(のクラス)のメソッドにjava.rmi.RemoteExceptionというチェック例外を定義しておくこと

    • 共有するオブジェクト(のクラス)のスタブ(など)を予め作成しておくこと(rmic)※この手順はJava5以上だと動的プロキシを使うため要らないっぽい

    これは面倒な気がします。転じて、dRubyの場合、


    1. リモートオブジェクトを提供するプロセスやリモートオブジェクトを使うプロセスを動かす


    という手順のみでいけるということか。えらく楽ですね。リモートオブジェクトの場を提供するプロセスが、扱うオブジェクトの型を知らなくてもいいと言う点が楽にしているのかな、と言う理解で1章は終了。

    「1.5.3 参照渡し/値渡し」は、もうちょっと後のページで解説されるみたいなので、ここではさらっと読むだけにします。

    次は2章、いよいよコーディング。


About 1章

ブログ「dRubyの正面」のカテゴリ「1章」に投稿されたすべてのエントリーのアーカイブのページです。過去のものから新しいものへ順番に並んでいます。

前のカテゴリは0章です。

次のカテゴリは2章です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。