ruby-trunk-changes r36379 - r36393

今日は主に Test::Unit の並列実行部分のリファクタリングがありました。あと Hash[ ] での Hash 生成の挙動の修正と Array#values_at の不具合修正がありました。どちらも例外的なケースの挙動が変化しているので踏むと厄介なので、地雷避けのためにはこういう微妙な挙動には依存しないようにしましょう。

nobu:r36379 2012-07-14 02:31:58 +0900

rb_thread_blocking_region() を deprecated にマークするためのプロトタイプ宣言が引数なしで書かれていて C++コンパイルエラーになるようなので修正されています。

svn:r36380 2012-07-14 02:32:02 +0900

version.h の日付更新。

nobu:r36381 2012-07-14 16:04:28 +0900

Array#join で要素の間にはさむデリミタの文字列が tainted だった時に、配列の要素が2つ以上あった場合に結果の文字列も tainted になるのはいいとして要素が1つだけだった場合はデリミタは利用されないのに結果が tainted になってしまっていたので、実際に利用されなければ汚染されないようにしています。 [ruby-core:42161] [Bug #5902]

nobu:r36382 2012-07-14 16:16:14 +0900

Test::Unit::Runner#_run_parallel で後始末の不要な初期化処理を begin 節の中からその前に移動しています。 ChangeLog のエントリがこの変更だけじゃないみたいですね。

nobu:r36383 2012-07-14 16:16:19 +0900

Test::Unit の並列実行時の子プロセスの終了を監視する Thread の処理を start_watchdog というメソッドに切り出しています。

nobu:r36384 2012-07-14 16:16:24 +0900

さらに Test::Unit の並列実行で worker の処理を Proc からメソッドに切り出すリファクタリングをしています。

nobu:r36385 2012-07-14 16:16:29 +0900

Test::Unit の並列実行時に worker 毎のオブジェクトなどの情報を管理している Hash/Array への登録がばらばらだったので launch_worker メソッドの中で実行することで一元化しています。

nobu:r36386 2012-07-14 16:16:33 +0900

同じく Test::Unit の並列実行時の worker の情報を削除する処理も delete_worker というメソッドに切り出しています。

nobu:r36387 2012-07-14 16:16:38 +0900

Test::Unit::Runner::Worker に kill という子プロセスを SIGKILL で止めるメソッドを追加して、終了時に全 worker を停止させる処理を quit_workers というメソッドに切り出しています。

nobu:r36388 2012-07-14 16:16:43 +0900

更に更に Test::Unit::Runner で各 worker の結果を受け取ってテストケースを割り当てたり停止させたりといったメインループ部分を deal メソッドとして切り出しています。これまで割り込み時に一部のリプライのみ処理していたものも deal メソッドで処理するようになったのでより graceful に止められるようになっているような気がします。

nobu:r36389 2012-07-14 16:16:50 +0900

同じく Test::Unit の並列実行時に警告メッセージの重複を省くための処理をブロック付きの Array#uniq! を使うようにリファクタリングしています。

nobu:r36390 2012-07-14 16:29:53 +0900

Test::Unit についての ChangeLog のエントリが重複していたので一部削除しています。

nobu:r36391 2012-07-14 17:08:15 +0900

Hash[ ] メソッドに配列を複数渡して Hash を生成する時に各引数が2要素の配列でなかったり nil だったりした時に無視していたのを例外を発生させるように修正しています。 Hash[k1, v1, k2, v2,...] のような呼びかたの時には引数の数が奇数だと例外が発生するので厳しくするほうに合わせています。 [ruby-core:39945] [Bug #5406]

ayumin:r36392 2012-07-14 17:31:21 +0900

Continuation の rdoc の markup 方法を修正しています。 [ruby-core:46243] [Bug #6706]

nobu:r36393 2012-07-14 18:18:51 +0900

Array#values_at に Range を渡した時にその範囲が配列のサイズを越えている時に、最後の要素の次には nil が入るのですが、その後は切り詰めてしまう(返す配列のサイズが指定した Range の幅より小さくなる)ようになっていたので、末尾を越えた部分も nil を詰めた配列を返すようにしています。 [ruby-core:43678] [Bug #6203]