Hatena::ブログ(Diary)

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

2014-08-31 ruby-trunk-changes r47322 - r47341

[][]ruby-trunk-changes r47322 - r47341

今日は dynamic Symbol の不具合修正、拡張ライブラリ zlib の不具合修正、benchmark の追加修正などがありました。

normal: r47322 2014-08-30 19:30:00 +0900

rb_sym2id() で pindown されていない Symbol を pindown してから返す場合 dsymbol_pindown() の戻り値を返すようにしています。 pindown する前の sym を返してしまっていたのでたまに test-all で SEGV が発生していたとのこと。

nobu: r47323 2014-08-30 22:29:45 +0900

gcc 3.4 以降で拡張機能を利用して warn_unused_result という attribute を関数宣言に追加するマクロ WARN_UNUSED_RESULT() を定義して、dsymbol_alloc(), dsymbol_check(), dsymbol_pindown() など Symbol 管理関係の関数にこれを利用して、戻り値チェックされていないと警告が出力されるようにしています。

normal: r47327 2014-08-31 08:53:28 +0900

拡張ライブラリ zlib の Zlib::GzipReader で rewind を呼ぶと zstream::flags の ZSTREAM_FLAG_GZFILE がクリアされてしまう不具合を修正しています。 [ruby-core:64128] [Bug #10101]

svn: r47328 2014-08-31 08:53:39 +0900

version.h の日付更新。

nobu: r47329 2014-08-31 11:49:50 +0900

r47260 および r47262 で Benchmark の時間計測を Process.clock_gettime に変更して環境によっては失敗するようになったテストで assert_in_delta を使っていたのを assert_in_epsilon を利用するように変更しています。 assert_in_delta はデフォルトの誤差が 0.001 なのに対して assert_in_epsilon はテストする値からの相対値(sleeptime が 1.0 ならおおよそ 0.001、つまり現在だとほぼ同じ)になります。

nobu: r47330 2014-08-31 15:05:43 +0900

r47320 で標準添付ライブラリ benchmark の時間計測に使う Process.clock_gettime のタイマーの種類を Process::CLOCK_MONOTONIC_RAW があればそれを優先するようにしましたが、Process::CLOCK_MONOTONIC_RAW はC ヘッダに定数があれば定義されますが、ヘッダに定義はあるのに実際に呼ぶとエラーになる可能性があるので、実際に呼んでみて例外が発生したら利用しないようにするようにしています。

akr: r47341 2014-08-31 16:59:12 +0900

r47330 の変更による文法エラーを修正しています。

2014-08-30 ruby-trunk-changes r47315 - r47321

[][]ruby-trunk-changes r47315 - r47321

今日は主に拡張ライブラリ psych の不具合修正がありました。

tenderlove: r47315 2014-08-30 06:02:19 +0900

拡張ライブラリ psych でハッシュのキー名に "<<" という文字列を利用するとロードした結果がおかしくなるという不具合を修正しています。 "<<" には特殊な意味がある場合があるらしく、その場合を判定するための条件に tag のチェックも追加するようにしています。 https://github.com/tenderlove/psych/issues/203

svn: r47316 2014-08-30 06:02:31 +0900

version.h の日付更新。

tenderlove: r47317 2014-08-30 06:11:47 +0900

さっそく YAML の "<<" というキーが登場してくれています。 拡張ライブラリ psych でハッシュのキーに "<<" を使うと、その値のハッシュを親にマージするという意味なのですが(そういえば Rails アプリの database.yml とかでこういうのみたことあったような)、それが働いておらずそのまま "<<" というキーの値としてロードされていたのを修正しています。 https://github.com/tenderlove/psych/issues/202

tenderlove: r47318 2014-08-30 06:24:33 +0900

拡張ライブラリ psych で数字と改行を含む文字列を古い(Psych 1.3.4 で) dump した結果を load しようとするとエラーになっていたのを修正しています。dump 時の余分な改行をなくした時に load できなくなったんでしょうかね。 https://github.com/tenderlove/psych/issues/189

tenderlove: r47319 2014-08-30 06:41:02 +0900

拡張ライブラリ psych で NameError 例外オブジェクトを load できなかった不具合を修正しています。むしろこんなものまでまともに dump/load できるんですね。 https://github.com/tenderlove/psych/issues/85

nobu: r47320 2014-08-30 15:15:22 +0900

r47260 や r47262 で benchmark ライブラリでの時間計測に Process.clock_gettime を利用するようにしたら、(主に仮想環境で?) Benchmark.realtime の精度をチェックしているテストが失敗するようになったのですが、まず CLOCK_MONOTONIC_RAW が利用できる場合はこちらを使うようにしています。こちらのほうがより正確に計測できるはずとのこと。

nobu: r47321 2014-08-30 15:18:57 +0900

また問題になったテストが sleep 0.001 して、Benchmark.realtime で測った誤差が 0.001 秒以下というチェック方法だったので、条件を緩和して sleep 1 して誤差も 1秒以下というチェックにしています。 これ sleep の時間と誤差は別に一緒でなくてもいいんですよね?

2014-08-29 ruby-trunk-changes r47309 - r47314

[][]ruby-trunk-changes r47309 - r47314

今日は fstring の管理テーブルの内部的なアクセス方法についての変更がありました。

nobu: r47309 2014-08-28 22:56:47 +0900

r47306 の ARGF の修正のところで条件分岐内でのみ初期化されていた変数を修正しています。 r47306 の前からみたいですけど。

normal: r47310 2014-08-29 15:30:03 +0900

freeze された文字列 fstring を共有するための管理テーブル frozen_string を string.c の static 変数として宣言していたのを、rb_vm_t のメンバとして移動して GET_VM() から取得するように変更しています。 Multi VM フレンドリーにするため、ということでしょう。 [ruby-core:64618] [Feature #10182]

svn: r47311 2014-08-29 15:30:20 +0900

version.h の日付更新。

normal: r47312 2014-08-29 16:22:23 +0900

r47310 の frozen_strings の移動を revert して、かわりに frozen_strings を利用するところで直接 static 変数を参照するのではなくて rb_vm_fstring_table() という関数を経由して取得するようにしています。 チケットの議論によると MVM は今停止されているので、そのためにヘッダの依存関係を増やしたくないなぁ、ということだそうです。 [ruby-core:64627] [Feature #10182]

hsbt: r47313 2014-08-29 17:37:39 +0900

rinda と rss のテストの不要な代入の除去。

hsbt: r47314 2014-08-29 17:57:06 +0900

標準添付ライブラリ net/imap のテストでチェックに使われていない無駄なコードを削除しています。

2014-08-28 ruby-trunk-changes r47302 - r47308

[][]ruby-trunk-changes r47302 - r47308

今日はほぼ IO まわりの例外メッセージや警告メッセージで文字列埋め込みに PRIsVALUE を利用するようにする変更だけでした。

nobu: r47302 2014-08-28 14:55:05 +0900

IO.new にブロックが渡されなかった時の警告メッセージに埋め込むクラス名を PRIsVALUE を使うことでエンコーディングを保持するようにしています。

nobu: r47303 2014-08-28 14:55:08 +0900

IO#advice で発生させる例外のメッセージでも埋め込みに PRIsVALUE を利用して VALUE 型のまま埋め込みするようにしています。

svn: r47304 2014-08-28 14:55:20 +0900

version.h の日付更新。

nobu: r47305 2014-08-28 14:55:22 +0900

IO.open などのエンコーディングオプション解析で、指定が(external_encoding/internal_encoding と encoding オプションで)重複した時の警告メッセージに埋め込む文字列を %s ではなくて PRIsVALUE で埋め込むことでエンコーディングを保持するようにしています。

nobu: r47306 2014-08-28 15:18:30 +0900

ARGF のファイル切り替え時の警告メッセージでも PRIsVALUE を使ってファイル名を埋め込むことでエンコーディングを保持するようにしています。

nobu: r47307 2014-08-28 17:27:53 +0900

r47305 で追加したテストで open がブロックなしで呼ばれていたため file descriptor が leak していたのでブロックを渡して閉じるように修正しています。

nobu: r47308 2014-08-28 21:01:43 +0900

r47303 で変更した IO#advise のテストで locale が UTF-8 でない時を考慮して正規表現に埋め込む文字列Regexp.quote で正規表現のメタキャラクタをエスケープさせるようにしています。

2014-08-27 ruby-trunk-changes r47291 - r47301

[][]ruby-trunk-changes r47291 - r47301

今日は win32ole の VT_DATE の変換の精度向上の他は、リファクタリング的な変更が主でした。

hsbt: r47291 2014-08-26 22:30:35 +0900

r47251 と r47263 で削除した test_complex.rb と test_rational.rb から削除したコメントアウトされた assertion のうち通るものを追加しています。

normal: r47292 2014-08-27 08:00:37 +0900

rb_iseq_t の line_seq_table のメモリを確保するのに ruby_xrealloc() を使っていたのを REALLOC_N() に変更して、サイズがオーバフローした時のチェックを強化しています。

svn: r47293 2014-08-27 08:00:47 +0900

version.h の日付更新。

nobu: r47294 2014-08-27 08:24:52 +0900

r47292 の再修正。 REALLOC_N() は変数への代入も含んだマクロなので(再代入前の解放も含んでるからですね)、代入は不要だったので削除しています。

hsbt: r47295 2014-08-27 09:58:16 +0900

Complex と Rational のテスト test_complex.rb と test_rational.rb で mathn が $LOADED_FEATURES に追加されているかどうかで分岐していたところが不要になったので削除しています。

nobu: r47296 2014-08-27 11:10:22 +0900

parse.y の coverage() で内部的に一時バッファとして利用する配列を確保するのに自前で処理を書いてたのを rb_ary_tmp_new_fill() を呼び出すようにリファクタリングしています。

suke: r47297 2014-08-27 19:57:28 +0900

拡張ライブラリ win32ole で VT_DATE 型の WIN32OLE のオブジェクトから millisecond の精度までを Time オブジェクトに変換するようにしています。

hsbt: r47298 2014-08-27 21:10:21 +0900

標準添付ライブラリ drb, irb, net/telnet, rdoc, thwait などで Module#attr を利用していたところを attr_reader を利用するように変更しています。 Module#attr、そういうのもあったなぁと思ったら deprecated になっていたようです。 [ruby-core:64582] [Feature #10172]

hsbt: r47299 2014-08-27 21:21:41 +0900

標準添付ライブラリ drb, erb, observer, rake, rubygems, uri文字列リテラル内の #{expr} と埋め込みされてるところで to_s が明示的に呼ばれているのをやめるようにしています。文字列リテラル内の埋め込みでは暗黙のうちに to_s で変換されるので不要です。 [ruby-core:64584] [Feature #10174]

kazu: r47300 2014-08-27 23:06:58 +0900

r47287 の ChangeLog エントリで理由を修正しています。builddir が srcdir と違うという条件ではなくて、srcdir が絶対パスの時に失敗するというものでした。

glass: r47301 2014-08-27 23:36:25 +0900

標準添付ライブラリ tempfile で require "thread" していたのを削除しています。既に利用していないので不要だったとのこと。