注釈 RHG - Ch12 ファイル名と行番号

第12章 構文木の構築 ファイル名と行番号
http://i.loveruby.net/ja/rhg/book/syntree.html


……ということは、行番号が 2^13=8192 を超えると行番号表示がおかしくなるはずである。試そう。

File.open('overflow.rb', 'w') {|f|
10000.times { f.puts }
f.puts 'raise'
}

筆者の686マシンではruby overflow.rbでキッチリ1809行と表示された。成功である。ただし64ビットマシンではもう少しファイルを大きくしないとうまく失敗できないだろう。

1809行が成功の訳は、行番号用のカウンタが 8,191を最後に0に戻ってしまったことによる。8,192数えた後に1,809数えたのだから、合計は 10,001。これは overflow.rb 中の raise の行に一致する。

ちなみに、64ビットマシンでこれを確認しようとすると、2^45 = 35,184,372,088,832 行以上のファイルを作る必要がある。改行1つにつき1バイトとしても 32TB のファイルになる。自分のPCで確認するのは当分先の話になりそうだ。