[#7064] How to put version number of shared library? — Ryo HAYASAKA <hayasaka@...21.u-aizu.ac.jp>
早坂@会津大学です。
4 messages
1999/06/02
[#7082] [BUG] unpack('m') — 民斗 <tommy@...>
民斗です。
6 messages
1999/06/07
[#7091] [BUG?] load in thread — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
7 messages
1999/06/09
[#7092] Re: [BUG?] load in thread
— matz@... (Yukihiro Matsumoto)
1999/06/09
まつもと ゆきひろです
[#7102] Ruby 1.3.4-990611 — Yukihiro Matsumoto <matz@...>
Ruby 1.3.4-990611 is out, check out:
20 messages
1999/06/11
[#7108] Re: Ruby 1.3.4-990611
— Koji Arai <JCA02266@...>
1999/06/12
新井です。
[#7123] Re: Ruby 1.3.4-990611
— nagai@...
1999/06/16
永井@知能.九工大です.
[#7110] --enable-shared support — Katsuyuki Komatsu <komatsu@...>
小松です。
11 messages
1999/06/14
[#7111] Re: --enable-shared support
— WATANABE Tetsuya <tetsu@...>
1999/06/15
渡辺哲也です。
[#7173] [BUG] <<`HERE_DOC` — Koji Arai <JCA02266@...>
新井です。
7 messages
1999/06/22
[#7178] [PATCH] rubydb3x.el, ruby-mode.el — nobu.nakada@...
中田です。
7 messages
1999/06/22
[#7181] acknowledgement — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
6 messages
1999/06/23
[#7210] Ruby 1.3.4-990624 — Yukihiro Matsumoto <matz@...>
Ruby 1.3.4-990624 is out, check out:
7 messages
1999/06/24
[#7223] Ruby 1.3.4-990625 — Yukihiro Matsumoto <matz@...>
Ruby 1.3.4-990625 is out, check out:
14 messages
1999/06/25
[#7224] -Wl,-rpath on Linux (Re: Ruby 1.3.4-990625)
— Ryo HAYASAKA <hayasaka@...21.u-aizu.ac.jp>
1999/06/25
早坂@会津大学です。
[#7225] Re: -Wl,-rpath on Linux (Re: Ruby 1.3.4-990625)
— Katsuyuki Komatsu <komatsu@...>
1999/06/25
小松です。
[#7226] Re: -Wl,-rpath on Linux (Re: Ruby 1.3.4-990625)
— Katsuyuki Komatsu <komatsu@...>
1999/06/25
小松です。
[#7227] Re: -Wl,-rpath on Linux (Re: Ruby 1.3.4-990625)
— Katsuyuki Komatsu <komatsu@...>
1999/06/25
小松です。
[#7253] Re: Ruby 1.3.4-990625 — SHIROYAMA Takayuki <psi@...>
9 messages
1999/06/29
[#7258] TkVariable — Koji Arai <JCA02266@...>
新井です。
6 messages
1999/06/29
[ruby-dev:7174] WeakRef?
From:
Kazuhiro HIWADA <hiwada@...>
Date:
1999-06-22 17:48:46 UTC
List:
ruby-dev #7174
ひわだです。
WeakRefというか、GCの挙動について教えてください。Flyweightパターンとか
に使えるかと思い、GCでdataが回収されるようなweakなHashを書きました。
WeakRefは、拡張してリファレンス先が解放されるときにコールバックしてく
れるようにしています。#長くなるので添付しませんが以下においてます。
http://easter.kuee.kyoto-u.ac.jp/~hiwada/ruby/memo/src/wrefwfr.rb
↓ここから
require 'wrefwfr.rb'
class WeakHash < Hash
alias assign []=
def alive?(k) key?(k) && self[k].weakref_alive? end
def []=(k,v)
assign(k, wr = WeakRefWFR.new(v))
# v = nil # ←注目!!!
wr.weakref_set_fin_event{ self.assign(k, nil) }
end
end
b = Hash.new
b[1] = (wr = WeakRefWFR.new("1"))
wr.weakref_set_fin_event{ b[1] = nil }
p ["b", b]; ObjectSpace.garbage_collect; p ["b", b]
a = WeakHash.new
a[1] = "1"
p ["a", a]; ObjectSpace.garbage_collect; p ["a", a]
↑ここまで
上のスクリプトを実行すると、
% ruby -v hoge.rb
ruby 1.3.4 (1999-05-31) [i386-linux]
["b", {1=>"1"}]
["b", {}]
["a", {1=>"1"}]
["a", {1=>"1"}]
"b" と同じように、"a" の方もGCで回収してほしいのですが失敗してます。さ
らに、「注目!!!」行のコメントを外し v = nil すると
% ruby -v hoge.rb
ruby 1.3.4 (1999-05-31) [i386-linux]
["b", {1=>"1"}]
["b", {}]
["a", {1=>"1"}]
["a", {}]
となって、こんどは所望の動作をします。1.3.4 (1999-06-11) でも同様。
weakref_set_fi...に渡している{ self.assign(k, nil) }というブロックから
v の値に何らかのリファレンスがあるのだろうかとか推測してますが、「v =
nil」ってのは、必要なものでしょうか?。それとも実はこんなスクリプトは
書いてはいけなくて、偶然動いてしまったのでしょうか ^^;;;。
#似た話を見掛けた気がしたんですが、見つからず… (__;
--
檜田和浩 <hiwada@kuee.kyoto-u.ac.jp>