From: Masatoshi SEKI Date: 2009-03-31T06:24:56+09:00 Subject: [ruby-dev:38218] rinda/eval.rb 咳といいます。 RindaにLindaのevalを追加したいと思ってます。 (1.8と1.9それぞれに) Lindaのevalは新しいプロセスを生成して式を評価し、その結 果をタプル スペースへ投入するものです。 Rindaではブロックをforkしたプロセスで評価してその結果を タプルとして 投入するインターフェイスにするつもりです。 そこで新しいライブラリを追加するにあたって質問があります。 (1) forkをつかってもよいですか? たぶんWindowsで動 作しません。 (2) ポータブルなテストがかけない気がしますが、なくてもかまい ませんか? open3とかどうしてるんだろ。 コードじたいはたぶんこんな↓感じです。 --- require 'drb/drb' require 'rinda/rinda' module Rinda class TupleSpace def rinda_eval(&blk) Rinda::rinda_eval(self, &blk) end end class TupleSpaceProxy def rinda_eval(&blk) Rinda::rinda_eval(@ts, &blk) end end module_function def rinda_eval(ts) ts = DRbObject.new(ts) unless DRbObject === ts pid = fork do DRb.stop_service DRb.start_service('druby://127.0.0.1:0') place = TupleSpaceProxy.new(ts) tuple = yield(place) place.write(tuple) end Process.detach(pid) end end