石橋"rubyholic"秀仁です。こんばんは。

From: Masatoshi SEKI <m_seki / mva.biglobe.ne.jp>
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