ruby-trunk-changes r42427 - r42444

今日は WEBrick の仕様変更や Range#last の変更の revert などがありました。

drbrain:r42427 2013-08-08 03:38:39 +0900

標準添付ライブラリの WEBrick で send_body に渡すレスポンスが IO オブジェクトか String を渡すようになっていましたが、クラスをチェックするのではなくて readpartial が呼べるかどうかをチェックする duck typing に変更して StringIO などを渡すこともできるようにしています。コミットログや NEWS には read も呼べるかチェックするようなことが書かれていますが実際には readpartial だけチェックしていますね。 StringIO で渡すなら String そのまま渡せばいいんじゃないかと一瞬思いましたが、ストリーミングする時に使いたいみたいですね。 [ruby-core:53665] [Feature #8155]

svn:r42428 2013-08-08 03:38:46 +0900

version.h の日付更新。

charliesome:r42429 2013-08-08 06:00:34 +0900

r41671 で入れた CVE-2013-4073 のテストで、証明書のホスト名に NUL 文字を入れるのにシングルクオートを使っていたため NUL 文字ではなくて '\0' という文字列そのものが入ってしまっていて意図したテストになっていなかったのを修正しています。 [ruby-core:56437] [Bug #8750]

nobu:r42430 2013-08-08 10:26:27 +0900

Mac OS X の(というか HFS+ ファイルシステムの) UTF-8 エンコーディングが濁点、半濁点を合成文字で表現する(NFCRuby ではNFC正規化された UTF-8UTF-8-MAC というエンコーディングとして保持しています)のを通常の UTF-8 に変換する (NFD正規化)する処理を dir.c の dir_each() から抜き出して file.c の rb_str_normalize_ospath() という関数にしています。

nobu:r42431 2013-08-08 10:27:19 +0900

r42400 の Range#last が無引数で呼ばれた時に、数値の範囲で終端を含まないフラグが立っていた時に返すものを終端ではなく最後の数値に変更したのを revert しています。標準ライブラリで影響していたものがあったこと、RubySpec でもこの変更で影響があったことなどから非互換の影響大とみて変更をやめています。また連動して変更した r42403 での Net::HTTPHeader の変更も、Range#last を使わない実装に変更しています。 [ruby-dev:47587] [Bug #8739]

naruse:r42432 2013-08-08 11:16:17 +0900

r42431 は r42400 の実装側だけ revert していたので、テストを追随させています。単に追加したテストを revert するのではなく戻した後の挙動に合わせるように assertion を変更しています。 [ruby-dev:47587] [Bug #8739]

usa:r42433 2013-08-08 12:14:15 +0900

r42427 で追加した WEBrick のテストが IO の binmode を考慮していなかったため Windows で失敗していたので IO#binmode を呼び出すようにして修正しています。

nobu:r42434 2013-08-08 14:35:08 +0900

Range#last のテストから [Bug #8739] の現象の assertion を削除しています。

nobu:r42435 2013-08-08 14:48:52 +0900

rb_proc_call_with_block() の引数 argv に const を付加しています。一応 include/ruby/intern.h で公開されている API なので拡張ライブラリを書いている人はチェックしてみてください。

naruse:r42436 2013-08-08 14:54:08 +0900

make のターゲットに git bisect を使って問題の発生したコミットを特定する処理を make bisect や make bisect-ruby でみつけることができるようにしているようです。 対象の処理は make run (miniruby 使用) や make runruby で実行するように、つまりソースディレクトリに test.rb というスクリプトを置いておけばいいようです。またそのためのスクリプトを tool/bisect.sh に追加しています。これは便利そう。

shugo:r42437 2013-08-08 14:56:01 +0900

NEWS ファイルに r42396 の eval 内での Refinement の修正のため eval 内での module_function や private などの可視性の影響も eval 内に閉じるようになったことを追記しています。 [ruby-core:56329] [Bug #8722]

nobu:r42438 2013-08-08 14:56:13 +0900

r42436 で追加した tool/bisect.sh の svn property 設定。

usa:r42439 2013-08-08 15:42:05 +0900

test/coverage/test_coverage.rb のテストで行数が大きいスクリプトでの Coverage の行番号のテストのために生成するスクリプトで引数なしの Kernel#p メソッドを並べていたのですが、これが Windows 環境では標準出力をファイルにリダイレクトした場合は遅い(fsync() を呼ぶらしい)ためタイムアウトが起きてしまっていたので、ただの "1" を並べるように変更しています。

ko1:r42441 2013-08-08 16:50:55 +0900

include/ruby/ruby.h に TracePoint のイベント定数 RUBY_EVENT_SWITCH を復活させています。定数は RUBY_INTERNAL_EVENT_SWITCH と同じです。これは ruby-prof がこの非互換で動かなくなったための対処とのこと。 obsolete であることは変わらないということなので今後は使わないようにしましょう。

ko1:r42442 2013-08-08 19:56:52 +0900

RGenGC の shady 化された時のイベントを保存しておいて終了時にダンプする機能の on/off 指定するマクロ USE_RGENGC_LOGGING_WB_UNPROTECT が定義されていない時を考慮するように r42173 で条件を変更してましたが、未定義の時は 0 で定義するようにするスタイルに変更しています。

ko1:r42443 2013-08-08 19:58:03 +0900

String#% の実装で配列の参照も読み込みのみなので RARRAY_RAWPTR() を利用して不要な shady 化を防ぐようにしています。

ko1:r42444 2013-08-08 20:00:06 +0900

thread.c の rb_threadptr_pending_interrupt_check_mask() でも内部的に利用している Array オブジェクトの要素を参照する時に読み込みのみなので受け取るポインタ変数に const を付加して RARRAY_RAWPTR() を利用するようにして不要な shady 化を抑制しています。