首藤です。
半月前のメイルに忘れた頃のフォローです。

A.中村さん wrote:

> > これは CPU が複数ある場合活用でき
> > るのでうれしいです。
>
> ん。ゲンジツはさておき夢の話ですが、
> fork()によってドッペルしちゃうオブジェクトたちを
> (自動的に)orbによる分散オブジェクトに
> 差し替えてしまったり出来たら、カッコイイですね。

夢の話の続きです…

Java 方面の自分の研究で、それをやろうと考えていたことがあります。

正確に言うと fork() ではなくて、
スレッドをネットワーク越しに別マシンに移送させた場合に、
ローカルな参照を遠隔参照にすげ替えてしまおう、と考えていました。

スレッド移送システム (MOBA) は作ったものの、スレッドから
reachable なオブジェクト群は単純に移送先に
コピー (ドッペル) してしまっていて、いろいろと悲しい思いをしていました。

それを達成するには、すげ替え後の遠隔参照に対して、
ローカル参照とまったく同じ操作 (メソッド呼び出し,
フィールドアクセス, 配列アクセス, …) ができないといけません。
しかーし、Java 用の ORB にできることと言えば、
けっきょくメソッド呼び出しだけ。配列の遠隔参照もできません。
(cf. RMI, HORB, Voyager 他あらゆる ORB)
「分散オブジェクト」の名前が泣いてます。「RPC」で充分です。

そこで、遠隔参照に対して、完全にローカル参照と同じ操作を行える
Java 用分散オブジェクトシステム (MetaVM) を作りました。
これとスレッド移送システムをくっつけようという計画は…実現してません。


Ruby でそこまでやるべき、とまでは思ってないですが、
そこまでやるためには、ORB がなかなか大変です。
例えば、dRuby では遠隔呼び出しの引数は遠隔にコピーされるわけですが、
これはローカル呼び出し (参照を値渡しする) とは違う動作なので、
遠隔呼び出しとローカル呼び出しではプログラムの挙動が違い得ます。
(例えば、引数として渡されたオブジェクトの状態がメソッド内で変化する場合)
なので、プログラマの知らぬ間に、ローカル参照が遠隔参照に
すげ替えられたりすると、プログラムの挙動が変わってしまって
困ったことになりかねないです。

いや、別に、
遠隔呼び出しをローカル呼び出しと同じセマンティクスにせよ!
とは言わないです。
コピーして渡す方が性能的にお得な場合が多い気がしますし。

SHUDO Kazuyuki/首藤一幸   私をたばねないで あらせいとうの花のように
  shudoh / muraoka.info.waseda.ac.jp