Hatena::ブログ(Diary)

PB memo このページをアンテナに追加 RSSフィード

2014-09-29 ruby-trunk-changes r47731 - r47739

[][]ruby-trunk-changes r47731 - r47739

今日は拡張ライブラリ date の TypedData 化と Write Barrier 挿入による WB Protected 化、Windows 版での File.expand_path のユーザ名展開の不具合修正などがありました。

nobu: r47731 2014-09-29 06:47:59 +0900

CentOS 5 の古い ruby だと Array#shift に引数が受け付けられなかったり String#start_with? がなかったりするので tool/downloader.rb の r47693 や r47726 の変更を修正しています。start_with? ってどれくらい前だろ…多分 1.8系でしょうね。

nobu: r47732 2014-09-29 09:49:12 +0900

拡張ライブラリ date で TypedData を利用するようにしています。

nobu: r47733 2014-09-29 09:49:18 +0900

r47732 の続きで拡張ライブラリ date で Date の操作に Write Barrier を挿入して WB Protected としています。

nobu: r47734 2014-09-29 10:45:11 +0900

r47733 のさらに続きで拡張ライブラリ date にさらに Write Barrier を挿入しています。また struct SimpleDateData と struct ComplexDateData の VALUE 型のメンバに const を付けることで Write Barrier 挿入すべき箇所を検出できるようにしています。

nobu: r47735 2014-09-29 11:20:56 +0900

で、最終的に r47734 の構造体メンバの const を付加したのはやめています。 aggregation assignments のためとあるのですが、多分初期化の代入で {0, 0, 0} みたいに定数で初期化する時の書きかたのことじゃないかと思います。

[追記]と思ったらそうではなくて adat->s = bdat->s のように構造体丸ごと代入の右辺左辺に書く方法のことだそうです。[/追記]

nobu: r47736 2014-09-29 21:17:47 +0900

拡張ライブラリ digest で Data_Get_Struct() や Data_Wrap_Struct() が利用されているところで警告が出ないように RUBY_UNTYPED_DATA_WARNING を 0 に再定義するようにしています。

nobu: r47737 2014-09-29 22:54:37 +0900

Windows で File.expand_path で "~" を展開する時に rb_bug() で異常終了する不具合を修正しています。 r47639 で導入された、String オブジェクトバッファ部分に C の静的メモリ領域をそのまま使った時に struct RBasic::flags に STR_NOFREE を立てておいて sweep 時のバッファの free() 処理をスキップさせるしくみが、String のバッファが拡張された時に flags から STR_NOFREE フラグを落としていなかったのを修正しています。 [ruby-core:65317] [Bug #10304]

nobu: r47738 2014-09-29 22:54:50 +0900

r47737 の追加修正。 win32/file.c で File.expand 時の文字列サイズの拡張で新しいサイズの指定が間違っていたのを修正しています。 さっきの r47737 の修正がチケットにあったパッチとだいぶ違うなぁと思ったら別の問題も潜んでたってことみたいですね。 [ruby-core:65317] [Bug #10304]

nobu: r47739 2014-09-29 23:13:50 +0900

拡張ライブラリ racc/cparse で Racc::CparseParams というクラスを内部クラスとして allocate メソッドや initialize/initialize_copy を undef しています。 初期化されないオブジェクトを作って SEGV させたりできないようにするためのケアだと思います。

2014-09-28 ruby-trunk-changes r47723 - r47730

[][]ruby-trunk-changes r47723 - r47730

今日は tool/downloader.rb 関連の変更と、struct RData の deprecated 警告の出力方法の追加などがありました。

duerst: r47723 2014-09-28 11:14:16 +0900

make update-unicode というターゲットを追加して Unicode のデータファイルをダウンロードするようにしています。

svn: r47724 2014-09-28 11:14:26 +0900

version.h の日付更新。

nobu: r47725 2014-09-28 11:54:59 +0900

tool/downloader.rb でダウンロードする URI の種類をシンボルで指定していたのを、クラスを分離してクラス名を指定するように変更しています。

nobu: r47726 2014-09-28 20:27:22 +0900

r47725 の tool/downloader.rb の仕様変更に configure.in を追随させています。 tool/get-config_files は不要になったため削除しています。

ktsj: r47727 2014-09-29 00:09:40 +0900

gc.c で GC_DEBUG が真の時に mark 対象のオブジェクトの情報をダンプする rb_gcdebug_print_obj_condition() でオブジェクトが remember set に含まれているかの出力に RVALUE_REMEMBERED() 関数を利用するようにしています。

svn: r47728 2014-09-29 00:09:59 +0900

version.h の日付更新。

nobu: r47729 2014-09-29 00:26:21 +0900

tool/downloader.rb の引数配列の展開して渡す記法を先頭で行っているのを、個別に渡すようにしています。 1.9 以前の BASERUBY では最後の引数以外で展開渡しができなかったので。

nobu: r47730 2014-09-29 00:27:24 +0900

r47717 で struct RData の利用が deprecated にされましたが、警告を出す方法とその制御するマクロ名を少し変更しています。 RUBY_UNTYPED_DATA_WARNING が 1 に定義されている時に警告するようにしています。また rb_data_object_alloc_deprecated() で警告するようにしていたのを、Data_Get_Struct の実体を関数 rb_data_object_get() として定義して、この関数の利用でも警告を出力するようにしています。 Wrap_Data_Struct() は使わずに独自にメモリ確保するケースもあるかもしれないので警告ポイントを増やしたということでしょうか。

2014-09-27 ruby-trunk-changes r47717 - r47722

[][]ruby-trunk-changes r47717 - r47722

今日は struct RData での構造体をwrapしたオブジェクトの作成を deprecate にする変更がありました。

拡張ライブラリ作者のかたは struct RTypedData を利用するよう移行を検討してください。

nobu: r47717 2014-09-27 10:28:47 +0900

拡張ライブラリで(組み込みのクラスにも存在しますが)構造体をwrapしたオブジェクトを作成するには T_DATA 型のオブジェクトを利用しますが、実際の内部表現には昔からある struct RData 型と struct RTypedData 型のがあり、型情報 rb_data_type_t を含む RTypedData のほうが推奨されていました。このコミットではテスト用の拡張ライブラリに残っていた struct RData 型のオブジェクトを TypedData に変更し、RData 型の利用を deprecate に宣言しています。拡張ライブラリ作者は要注意ですね。一応 EXPERIMENTAL とマークされているので、影響が大きすぎたら再考されるかもしれませんが…。

svn: r47718 2014-09-27 10:28:58 +0900

version.h の日付更新。

nobu: r47719 2014-09-27 10:30:16 +0900

拡張ライブラリ digest で struct RData 型を利用していたところを TypedData を利用するようにしています。

ktsj: r47720 2014-09-27 10:34:32 +0900

gems/bundled_gems の power_assert のバージョンを 0.1.4 に更新しています。

glass: r47721 2014-09-27 12:13:22 +0900

標準添付ライブラリ uriURI.parse に文字列か to_str で文字列変換できるオブジェクト以外を渡した時の例外が NoMethodError になっていたのを URI::InvalidURIError を発生させるように修正しています。 [ruby-core:64453] [Bug #10150]

nobu: r47722 2014-09-27 17:17:43 +0900

tool/rbinstall.rb で -i/--install で指定するインストール種別に comm-hdr と arch-hdr を追加して、アーキテクチャ非依存/依存のヘッダをそれぞれ独立して指定できるようにしています。

2014-09-26 ruby-trunk-changes r47713 - r47716

[][]ruby-trunk-changes r47713 - r47716

今日は複雑な include/prepend 関係での SEGV と、拡張ライブラリ stringio での Encoding 絡みの不具合の修正がありました。

normal: r47713 2014-09-26 05:18:22 +0900

man/ruby.1 に Thread と Fiber のそれぞれのマシンスタックサイズとVMスタックサイズをセットする環境変数の説明を追記しています。 [ruby-core:64717] [Feature #10197]

svn: r47714 2014-09-26 05:18:36 +0900

version.h の日付更新。

normal: r47715 2014-09-26 05:29:15 +0900

いまいちなぜ発生するか理解しきれてないのですが、オブジェクトのクラスの継承ツリーを辿って特異クラスや IClass を除いた普通のクラスを取得する関数 rb_class_real() で、辿っている途中で NULL になった時に SEGV する不具合を修正しています。 Module を include してメソッドを alias した Module を prepend したクラスの Method オブジェクトを取り出して inspect を呼ぶと起きるそうです。うーん、なんかこれは prepend 時の処理に考慮漏れがあるような気も。 [ruby-core:65214] [Bug #10282]

nobu: r47716 2014-09-26 12:52:37 +0900

拡張ライブラリ stringio で StringIO#set_encoding で ASCII-8BIT に設定しておいて別の Encoding の文字列を write で書き込むと Encoding::CompatibilityError が発生してしまう不具合を修正しています。 [ruby-core:65240] [Bug #10285]

2014-09-25 ruby-trunk-changes r47710 - r47712

[][]ruby-trunk-changes r47710 - r47712

今日は IO のバッファの解放処理の malloc_increase 対応などがありました。

ayumin: r47710 2014-09-25 07:54:10 +0900

標準添付ライブラリ matrix の rdoc 用コメントの typo 修正。 https://github.com/ruby/ruby/pull/726

svn: r47711 2014-09-25 07:54:21 +0900

version.h の日付更新。

normal: r47712 2014-09-25 19:40:37 +0900

io.c で rb_io_buffer_t::ptr の解放処理をまとめる free_io_buffer() という関数を導入してこれを利用するようにするリファクタリングを行っています。また free_io_buffer() では ruby_sized_xfree() を呼び出すことで malloc_increase を更新してメモリ使用量に反映させるようにすることで GC タイミングへの影響をより正しく判断できるようにしています。