From: Hideto ISHIBASHI Date: 2000-07-14T19:31:57+09:00 Subject: [ruby-list:23857] ObjectDBM(o_dbm), WeakRef (Re: dump a single object) 石橋"rubyholic"秀仁です。こんばんは。 From: Masatoshi SEKI Subject: [ruby-list:23783] Re: dump a single object > > Ruby 本に PStoreWC (PStore の WeakRef 版) があります。 > > > 同様に o_dbm (ObjectDBM) でも、WeakRef を使って > > パフォーマンスの向上が図れると思います。 > o_dbmって自前のキャッシュの仕組みが入っていませんでしたか? > あれ? 勘違いかな。 あれ、そうだったんですか? < 理解してないやつ (^^; (確認中) そうでした。たしかに自前で実装されていました。 WeakRef ではないので、GC されないキャッシュです。 これって毎回ロードするという点では、PStore と同じ ですよね。DBM を使うぶん、かなり速いと思いますけど。 # WeakRef でも、結局あまり変わらないかもしれませんしね。 > > # 最近 ruby-list で WeakRef を見かけます。ちょっとブーム? > > 咳にはブームです。 どうも。「マイブームつながり」です :-) ぼくも WeakRef の機能と仕組みは面白いと思っています。 機能としては、永続化機構の Virtual Proxy にも使えそうです。 仕組としては、ふつうに参照すると GC で回収されないので、 id で間接的に参照してますね。こういうトリック好きです。 ついでに、ちょっと変なコードを発見しました (o_dbm.rb:455)。 def transaction @status = START begin txn, value = catch(ABORT_LABEL){[nil, yield(@current_transaction)]} (以下略) @current_transaction は未定義なので、いつも nil です。 test-o_dbm.rb には、 odbm.transaction do |txn| ... end というコードはありません (ブロック引数がない)。 しかし、コードの文脈からは yield(self) ですよね。 あるいはブロック引数は使わない、とかでしょうか。 これを見るかぎり、ObjectDBM が過剰責務になったので、 (Static/Dynamic)Transaction に分割されたようですね :-) -- Hideto "rubyholic" ISHIBASHI http://www.rr.iij4u.or.jp/~hideto-i/ blade clone: http://www.rr.iij4u.or.jp/~hideto-i/rb/yaiba/index.html