ruby-trunk-changes r42683 - r42692

今日は標準添付ライブラリ timeout.rb がデフォルトではブロック内の処理を止めるのに例外でなく throw を使うようにする変更、またスクリプト内に '\r' が '\n' とペアでない状態で存在した時に警告を出力するようにする変更などがありました。

kazu:r42683 2013-08-26 10:39:19 +0900

r42668 で gcd_ul() から改名した bignum.c の関数 gcd_timtick_int() をさらに gcd_timetick_int() に改名しています。

svn:r42684 2013-08-26 10:39:24 +0900

version.h の日付更新。

nobu:r42685 2013-08-26 12:37:15 +0900

RbConfig::SIZEOF に C の型のサイズを設定する sizes.c を configure.in の RUBY_CHECK_SIZEOF() の呼び出しから抽出して自動生成するようにしています。

kazu:r42686 2013-08-26 13:13:46 +0900

r42658 で ARY_SHARED_OCCUPIED() というマクロの導入と書き換えの際に引数を変更してしまっていたのを修正しています。

nobu:r42687 2013-08-26 13:27:35 +0900

r42629 の ChangeLog エントリで非ASCII 文字が含まれていたのを iconv で変換しています。 [ruby-core:56804] [Bug #8819]

ko1:r42688 2013-08-26 14:47:27 +0900

Array#slice や Enumerable#sort_by、Struct.new で配列を操作する時に内容を変更しないので RGenGC の Write Barrier の挿入なしで実行するようにしています。また拡張ライブラリ pathname で RARRAY_PTR() を使っていたところでも RARRAY_AREF() を使うようにしています。

nobu:r42689 2013-08-26 15:02:47 +0900

r42688 で行末の空白除去。

nobu:r42690 2013-08-26 15:27:48 +0900

標準添付ライブラリ timeout.rb がタイムアウト時に例外を投げて処理を中断させていたのを、throw-catch の大域脱出を使って Timeout.timeout のブロック内を抜けさせて、例外は Timeout.timeout のところから指定された例外を発生させるようにしています。
これは例外発生時に Exception#exception メソッドを呼ぶことを利用して、デフォルトで利用される Timeout::ExitException#exception で throw を投げることで throw-catch を使うように実装をすりかえるようです。トリッキーですねー。ブロック内でタイムアウト時に指定の例外が発生することを期待している場合もあるのでは……と思いましたが、例外クラスをライブラリの外から指定した場合はこれまでと同様に例外で抜けるので、そこは問題なさそうです。
[追記]と、思ったのですがやっぱり常に throw にすりかえになっていました。r42710 でここに書いたように例外クラスが指定された時にはその例外発生になるように戻されていました。[/追記]
Timeout::ExitException を内部でわざと rescue するようなことをしていると期待したように動かなくなるかもしれませんけど、これは rescue Exception と全ての例外を捕捉してしまっているような時に Timeout の例外も捕捉してしまう問題に対する対処であるのでやむを得ないかなという感じです。 rescue Exception なんてする時点で自分で責任持ってねって言いたいですけど(Kernel#exit の SystemException とか Signal とか InterruptedException とかも飛んでくるわけなので)。 と思ったらチケットのほうでは nobu さん自身 rescue Exception しているのが問題として一旦 Reject していますね。 [Bug #8730]

nobu:r42691 2013-08-26 16:25:08 +0900

parse.y で CR+LF のセット以外の CR('\r') が出現したら警告を出すようにしています。 [ruby-core:56240] [Feature #8699]

eregon:r42692 2013-08-26 17:59:55 +0900

r42691 の警告メッセージの typo を修正しています。