[#47529] ruby1.9.2 にて、 IO#reopen で第2引数を省略したときにモードが引き継がれない — jugyo kohno <kkohno@...>

jugyo と申します

11 messages 2010/10/08
[#47562] Re: ruby1.9.2 にて、 IO#reopen で第2引数を省略したときにモードが引き継がれない — "Y. NOBUOKA" <nobuoka@...> 2010/10/15

信岡です。

[#47537] Excel用のxmlssファイルを作成するライブラリ exlap_c — "YOSHIIZUMI" <t-yoshiizumi@...>

 吉泉といいます。

11 messages 2010/10/10

[ruby-list:47515] Re: Hash の制約について( Ruby1.8)

From: "T.Watanabe" <wtnabe@...>
Date: 2010-10-02 15:14:55 UTC
List: ruby-list #47515
  wtnabeです。

  削除の件は置いといて、ちょっと興味が湧いたので試してみました。
  コードはこんな感じに書き換えてあります。

friends = Hash.new
i = 0
while i < 5000000
i_s = i.to_s
friends[i_s.intern] = i.to_s
i = i + 1
end
puts "size = #{friends.size}"
puts "friends[:0] = #{friends[0.to_s.intern]}"
puts "friends[:1] = #{friends[1.to_s.intern]}"
puts "friends[:2097152] = #{friends[2097152.to_s.intern]}"
puts "friends[:4999999] = #{friends[4999999.to_s.intern]}"
puts "friends[:5000000] = #{friends[5000000.to_s.intern]}"
puts "friends[:5000001] = #{friends[5000001.to_s.intern]}"
puts "i = #{i}"

  これをいくつかの処理系で動かしてみました。環境は OSX 10.5 です。

info: rbx-1.0.1-20100603: rubinius 1.0.1 (1.8.7 release 2010-06-03 JI)
[i686-apple-darwin9.8.0]

size = 5000000
friends[:0] = 0
friends[:1] = 1
friends[:2097152] = 2097152
friends[:4999999] = 4999999
friends[:5000000] =
friends[:5000001] =
i = 5000000

info: ruby-1.8.7-p299: ruby 1.8.7 (2010-06-23 patchlevel 299)
[i686-darwin9.8.0]

size = 2097152
friends[:0] = 4194304
friends[:1] = 4194305
friends[:2097152] = 4194304
friends[:4999999] = 4999999
friends[:5000000] = 2902848
friends[:5000001] = 2902849
i = 5000000

info: ruby-1.9.2-head: ruby 1.9.2p14 (2010-10-02 revision 29393)
[i386-darwin9.8.0]

num_of_hash.rb:7:in `intern': symbol table overflow (symbol 2095603)
(RuntimeError)
        from num_of_hash.rb:7:in `<main>'

  こうして見ると Rubinius の結果が元質問の意図に沿ったものなんじゃないか
という感じがします。

  で、1.9.2 が吐いてるように Symbol 周りで何か起きてるような印象です。
1.8.7 では書き込まれているはずのない値が返ってくるし、存在しないはずの
key が存在してるようです。

--
    wtnabe

In This Thread