ruby-trunk-changes r41092 - r41109

今日は String#b と String#ascii_only? を組み合わせた時の不具合修正、mingw32 でのビルド修正、 RGenGC の高速化、Numeric#quo の不具合修正/仕様変更、Bignum 関連の C API 追加などが様々な変更がありました。

knu:r41092 2013-06-06 00:05:48 +0900

String#b でエンコーディングを ASCII-8BIT にした文字列オブジェクトに String#ascii_only? メソッドを呼ぶと常に false が返ってくる不具合に対応しています。 [ruby-core:55315] [Bug #8496]

svn:r41093 2013-06-06 00:05:53 +0900

version.h の日付更新。

naruse:r41094 2013-06-06 00:32:28 +0900

Windows 版では MinGW 以外では NET_LUID という型が未定義なので自前で定義していたのですが、実際には MinGW64 (mingw-w64) でのみ定義されていて mingw32 では定義されていないためビルドに失敗していたようで、条件コンパイルの条件を修正しています。

tarui:r41095 2013-06-06 00:57:12 +0900

RGenGC の RememberSet のビットマップをスキャンする方法を変更して高速化を試みています。 MARKED_IN_BITMAP() というマクロでひとつずつビットの取り出しをしてチェックしていたのですが、スロット内の全ビットを舐めればいいので uintptr_t 単位で取り出してきてからその中の全ビットを(シフト演算でずらしながら)チェックするようにしているので、ビットマップのビットのチェックの部分のオーバヘッドを削っているのだと思います。

nobu:r41096 2013-06-06 01:01:05 +0900

r41095 の行末の空白を除去しています。

tarui:r41097 2013-06-06 01:15:26 +0900

RGenGC の世代管理のタイミング(?) を変更して効率化しているようです。 gc_mark_children でやっていた旧世代への昇格(加齢)を gc_mark() でオブジェクトを mark_stack に push する前に変更して、不要なオブジェクトの mark_stack への push を省くようにしているみたいです。

nobu:r41098 2013-06-06 01:16:05 +0900

r41097 の ChangeLog エントリの行末の空白を除去。

mrkn:r41099 2013-06-06 10:04:11 +0900

Numeric#quo で引数に Float が渡された時に戻り値が Rational になっていたのを Float を返すように修正しています。 [ruby-dev:44710] [Bug #5515]

nobu:r41100 2013-06-06 11:27:23 +0900

main.private メソッド(トップレベルのメソッド)の rdoc コメントを追加しています。

kazu:r41101 2013-06-06 12:00:02 +0900

r41097 の ChangeLogtypo 修正。

knu:r41102 2013-06-06 13:53:57 +0900

ディレクトリを削除、ということなのですが結構たくさんありましたね。

nari:r41103 2013-06-06 14:10:31 +0900

拡張ライブラリ objspace の r40957 で追加した object_tracing.c の allocation_info() の定義に static 修飾子が付いていなかったので static を追加しています。

nari:r41104 2013-06-06 14:18:40 +0900

同じく拡張ライブラリ objspace の object_tracing.c の allocation_info() という関数を lookup_allocation_info() と改名しています。構造体のタグ名と同じでまぎらわしかったので変更したとのこと。

tadf:r41105 2013-06-06 19:33:48 +0900

拡張ライブラリ date の ????_to_jd() 関数でポインタ型の ns という引数を渡されているのに dereference せずにポインタのまま使用してしまっていたのを修正しています。しかしこんな影響ありそうなミスでも特に問題が起きてない(このチケットも実際の Ruby のコードで不具合報告があったわけではなく、どうもソースコードを読んで気がついたっぽい)みたいで、あんまり通らないところなんですかね。 [ruby-core:55337] [Bug #8500]

akr:r41106 2013-06-06 20:57:35 +0900

configure.in で RUBY_REPLACE_TYPE() を使って size_t のチェックと数値変換マクロの定義の生成を行うようにしています。 また bignum.c に rb_absint_size()、rb_absint_size_in_word(), int_export_fill_dd(), int_export_take_lowbits(), rb_int_export() 等の関数を追加しています。全部は読んでいませんが、整数を表現した時に先頭の連続する 0 ビットを数えたり Integer のビットパターンを配列として取り出したりといった数値をビット列として扱うための関数群みたいです。またその一部を使って pack.c で "W" (BER compressed integer) 指示子の実装を書き替えています。

akr:r41107 2013-06-06 21:58:25 +0900

r41106 で追加したテスト用の拡張ライブラリのための depend ファイルを追加しています。

nobu:r41108 2013-06-06 22:01:06 +0900

r41107 で追加したファイルの svn property 設定。

mrkn:r41109 2013-06-06 22:31:22 +0900

Numeric#quo で引数が Float でない時には rb_rational_raw() で self の数値(左辺)を Rational にしてから計算していたのを、to_r メソッドの呼び出しによって Rational に変換してから計算するように変換戦略を変更しています。これにより to_r メソッドで挙動を定義できるようになったりエラー時の例外が変化したりと少し仕様が変化しているようです。 [ruby-core:41575] [Bug #5736]