ruby-trunk-changes r46707 - r46718

今日もビルドプロセス回りや内部的な構造の変更などが主でした。

nobu: r46707 2014-07-06 08:38:13 +0900

r46705 で導入した make clean-runnable が既に対象のディレクトリなどが存在しない時にエラーになっていたのを無視させるようにしています。

svn: r46708 2014-07-06 08:38:26 +0900

version.h の日付更新。

nobu: r46709 2014-07-06 10:00:29 +0900

標準添付ライブラリ rdoc で処理中のファイル名を端末に表示する時に行を上書きして出力する方法を、毎回1行ぶんの出力を(末尾の空白を追加して)出すのではなくて、直前の出力を CR+空白文字で上書きする出力を生成する方法に変更しています。

nobu: r46710 2014-07-06 10:00:34 +0900

標準添付ライブラリ rdoc で端末のサイズを取得するのに環境変数 COLUMNS を利用していたのを、より汎用的に拡張ライブラリ io/console/size を利用して IO.console_size で取得するようにしています。 io/console/size が追加されたのはいつからだろう…。 r31628 で追加(2011-05-18)なので 1.9.3 以降には入ってそうなのでまあ今現役とされているものには全て入ってそうですね。

nobu: r46711 2014-07-06 10:03:36 +0900

r46709 の続き。上書きすべき行の長さに最後の行のサイズをセットしておくように修正しています。0で初期化していたので上書きされてなかったみたいです。

nobu: r46712 2014-07-06 11:42:55 +0900

ext/etc/mkconstants.rb で拡張ライブラリ etc のための定数定義のヘッダを自動生成する時に、コメントがない項目については空の C 言語のコメントを生成するのを抑制しています。

nobu: r46713 2014-07-06 11:42:59 +0900

template/fake.rb.in で Windows 環境で File::ALT_SEPARATOR がバックスラッシュでなかった時に強制的にバックスラッシュに変更するようにしていたところ、他の環境でも nil になるように変更するようにしています。 これどういう時にずれるんでしょうね。 cygwinnil ですよね。 fake.rb って何でしたっけ。いつも忘れる。

ko1: r46714 2014-07-06 13:42:35 +0900

rb_vm_t::mark_object_ary の型をフラットな Array から Array を格納した Array と1段ネストさせるようにしています。各子 Array のサイズは 1024 までにしています。うーん多分登録するオブジェクト数が増えた時にバッファを realloc する時の負荷を考慮したのではないかと思います。また初期サイズ(親配列の)も 1 から 128 に増やしているので、128 x 1024 個登録するまでは realloc は発生しないようになっていると思います。

nobu: r46715 2014-07-06 14:20:10 +0900

template/fake.rb.in から変更されない部分を tool/fake.rb に分離して、tool/fake.rb の内容を読み込んで eval するように template/fake.rb.in を書き換えています。うーん eval とは剛毅な…。

ko1: r46716 2014-07-06 21:02:57 +0900

gc.c で mark されなくて sweep 待ちのオブジェクトを判定する is_dead_object() を is_dying_object() に改名しています。うーん本当に死んだら dead というより freed なので dead でもいいような気もしますけどねぇ。まあ本当に解放されるまでは resurrect で復活させられる時もありますが。そして is_dying_object() の条件を1つの if 文にまとめていますが条件の反転を忘れているため条件が間違っています。

ko1: r46717 2014-07-06 21:33:12 +0900

r46716 の条件の間違い修正。 is_dying_object() の条件もですが is_live_object() での is_dying_object() の条件も反転…あれ、こちらは結果は変わらなくって if-else の順番が逆になるようにしているだけですね。ありがちなパスを前にしたということですが、可読性のためでしょうか。

ktsj: r46718 2014-07-06 21:45:27 +0900

r46602 での拡張ライブラリ pathname での Pathname#birthname 追加や、file.c でも birthtime 関連の関数の #if での分岐が関数コメントの後、関数本体の直前だったため、rdoc コメントだけが存在する状態になっていたため、コメントの前から囲むようにしています。