読者です 読者をやめる 読者になる 読者になる

cookies.txt      .scr

ただのテキストファイルのようだ

Symbol Table Overflow

初めて知った。Rubyのシンボルって無限には作れないんだね。

a="a"
loop do
  puts a.to_sym
  a = a.succ
end

こんなスクリプト書いた。
そしたら"dodxx".to_symの次のシンボルづくりで死んだ。

a.rb:3:in `to_sym': symbol table overflow (symbol dodxy) (RuntimeError)
        from a.rb:3:in `<main>'
ruby a.rb  28.19s user 16.40s system 28% cpu 2:37.73 total

んで、

("a".."dodxx").to_a.size # => 2094896

この数字 is 何.

暇だったらRubyのソース読みたいっすね


追記:
ちなみに
$ ruby -v
ruby 2.0.0p247 (2013-06-27 revision 41674) [i686-linux]
でしたのだ。
環境によって数はかわるっぽいのですだ。特にx86_64?

追記2:
上のloopに入る前に
a="aaaaa"
300.times do
eval("#{a}=\"test\"")
end
と入れたら、作成できるシンボルの数が300減った。
今頑張って
2095000.timesのevalしてるとこ。
GCとか僕よくわかんないので。
学校から帰ってきたらなにか起きているはず。