ruby-trunk-changes r34605 - r34630

今日もたくさんコミットがありました。もうすぐ 1.9.3 のパッチレベルリリースがあるので trunk にも変更が多く入ってます。
Bitmap marking GC のメモリ領域計算の不具合修正、fiddle/dl の不具合修正、Fiber から fork すると子プロセスが abort する不具合修正、OpenStruct の dup 時の修正、Zlib の定数の追加、ドキュメントの追加/変更などがありました。

naruse:r34605 2012-02-15 05:13:27 +0900

r34493 で追加したメモリリークチェック用のコードで /proc/self/status を読むところで Solaris 10 ではテキストではなくバイナリデータが読めるためエラーになるので external_encoding を ASCII-8BIT に設定しています。 Solaris 10 だと設定の構造体の内容がそのままバイナリで読めるそうです。 [ruby-dev:45248] [Bug #6027]

svn:r34606 2012-02-15 05:13:32 +0900

version.h の日付更新。

drbrain:r34608 2012-02-15 07:59:15 +0900

Encoding の rdoc にエンコーディングの扱い一般的なドキュメントを追記しています。が後で少し修正されています。 [ruby-core:42267] [Bug #5949]

drbrain:r34609 2012-02-15 08:29:14 +0900

Encoding の rdoc のサンプルの修正と IO とエンコーディングについて追記。

naruse:r34610 2012-02-15 09:53:37 +0900

r34609 で追記された rdoc 内に非 ASCII 文字が含まれていたので置換しています。

drbrain:r34612 2012-02-15 10:12:08 +0900

Zlib の rdoc をごっそり修正しています。 [ruby-core:42263] [Bug #5948]

naruse:r34613 2012-02-15 10:23:00 +0900

r34608 で追加された Encoding の rdoc に追記/修正しています。

drbrain:r34614 2012-02-15 10:28:05 +0900

Zlib::Deflate.new の strategy に渡す定数として Zlib::FIXED と Zlib::RLE を追加しています。それぞれ Z_RLE と Z_FIXED という定数に対応しています。 圧縮に用いるアルゴリズムの指定で RLE はランレングスエンコーディングを指定、FIXED は「Z_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler decoder for special applications.」ということなので圧縮率は犠牲にしつつ高速なエンコードをするってことですかね。 参考URL: http://zlib.net/manual.html

nari:r34618 2012-02-15 11:09:44 +0900

Bitmap marking GC 用のマークのためのビットマップの領域のサイズ計算でヒープに入るオブジェクトスロットの数から計算していましたが、ヘッダ部分も含めてヒープ全体に対応するようにサイズ計算を修正しています。 [Bug #6006]

marcandre:r34619 2012-02-15 12:31:30 +0900

OpenStruct の rdoc の重複したサンプルの削除と英文の添削。

marcandre:r34620 2012-02-15 12:31:55 +0900

OpenStruct を dup するとメンバにアクセスする setter/getter の定義が特異メソッドであるためコピーされないので、initialize_copy で同じメソッドを定義するようにしています。 [ruby-core:42647] [Bug #6028]

drbrain:r34621 2012-02-15 13:25:11 +0900

Zlib の rdoc 修正。定数の具体的な数値の記述を消したり、説明を長くしたり短くしたり。ちょっと細かいところはよく読んでないです。

drbrain:r34622 2012-02-15 13:30:37 +0900

Zlib::ZStream#data_type が返す値の定数 Zlib::TEXT を追加しています(Z_TEXT に対応)。 Zlib::ASCII というのもあるのですが zlib の新しいバージョン(1.2.3 以降)では Z_ASCII は deprecated になるそうです。まあ実際の値 Z_ASCII と Z_TEXT で同じみたいですけど。

naruse:r34623 2012-02-15 15:52:10 +0900

Shift_JIS と CP50220 のコメント(rdoc?)に追記しています。 Shift_JIS の 7bit 部分は US-ASCII と同じになっていて JIS X 0201 ではないってことが追記されています。 JIS X 0201 はバックスラッシュ(円記号)とチルダ(オーバーライン)が違うんですよね。詳しくは「文字コード技術入門」を。

naruse:r34624 2012-02-15 17:45:15 +0900

r34580 で IO#read に渡した第2引数の読み込み先の文字列のサイズを切り詰める時に、バッファが共有されていたら複製するように rb_str_modify() の呼び出しを追加しています。

naruse:r34625 2012-02-15 18:47:22 +0900

r34624 の読み込みサイズより長い文字列を IO#read の第2引数に渡すテストを追加しています。これって文字列が共有されているのもテストしてるんでしょうか?

nobu:r34626 2012-02-15 19:52:31 +0900

r34506 と同様に ext/fiddle/closure.c でも LONG_LONG 型に変換する数値が Bignum であることを前提としていきなり rb_big2ull() を呼んでしまっていたところを NUM2ULL() に変更しています。

nobu:r34627 2012-02-15 19:57:05 +0900

fiddle で変数の型の signed/unsigned の値の変換が適当になってたのでちゃんと範囲チェックしながら変換するマクロ等を使い分けるように修正しています。 [ruby-core:42458] [Bug #5991] [Bug #6022]

nagachika:r34629 2012-02-15 23:00:11 +0900

Fiber の中から fork すると、子プロセスが終了時に 二重 free で abort などしてしまう不具合を修正しています。 Fiber は個別の Thread Local Storage を持つのですが、root Fiber だけは元の Thread のテーブルを共有するので、root Fiber の時は解放せず Thread にまかせることになっているのですが、Fiber の中から fork すると、終了時に子 Fiber 用のテーブルが rb_thread_t::local_storage にセットされたまま解放処理に来てしまうため、既に解放済みの st_table を再度解放しようとしてしまっていました。終了時に main thread の fiber が切り替わったままだったら local_storage だけは root Fiber のものに戻しておくようにしています。 [ruby-core:41456] [Bug #5700]

nagachika:r34630 2012-02-15 23:02:34 +0900

r34629 の ChangeLog のエントリに ML とチケットの番号を追記しています。