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とか僕よくわかんないので。
学校から帰ってきたらなにか起きているはず。