ruby-trunk-changes r38803 - r38812

今日は正規表現、Matrix、Enumerator::Lazy の不具合修正、仕様修正などがありました。

marcandre:r38803 2013-01-14 06:06:39 +0900

標準添付ライブラリ matrix の Matrix::EigenvalueDecomposition#hessenberg_to_real_schur の不具合修正。 にしてもこのメソッドもの凄く長いですね。先頭を見付けるのが大変でした。

svn:r38804 2013-01-14 06:09:52 +0900

version.h の日付更新。

naruse:r38805 2013-01-14 06:51:37 +0900

正規表現の文字クラスに [\W] のような否定形の文字クラスを利用すると文字クラスの範囲の重複を警告するメッセージが出力されていたのを修正しています。 [ruby-core:50344] [Bug #7471]

naruse:r38806 2013-01-14 07:02:31 +0900

Regexp.new, Regexp.compile の rdoc コメントの省略可能な第3引数の仮引数名を kcode に修正し、説明も加筆しています。

marcandre:r38807 2013-01-14 07:13:12 +0900

標準添付ライブラリの LUP分解の非正方行列の時の L と U の形状に間違いがあった不具合を修正しています。

marcandre:r38808 2013-01-14 10:19:12 +0900

Enumerator::Lazy#flat_map で作った Enumerator::Lazy オブジェクトはその元となる要素の要素数を返すようにしていたのですが、 nil を返すように変更しています。 Enumerator#size が nil を返すということは何回 yield されるかわからないということなのですが、仕様をみるかぎり(break などで止めないかぎり)要素数ぶん yield しそうなんですけどね。ネストしてても分解しないし。なぜでしょう。

mrkn:r38809 2013-01-14 14:42:48 +0900

r38801 の再修正。 ext/bigdecimal/bigdecimal.c で TYPE() を使うかわりに RB_TYPE_P() を利用するようにリファクタリングしています。

mrkn:r38810 2013-01-14 14:42:51 +0900

更に ext/bigdecimal/bigdecimal.c のコーディングスタイルをそろえるようにしています。

marcandre:r38811 2013-01-14 16:42:43 +0900

Enumerator::Lazy#take_while と drop_while にブロックが渡されなかった時に LocalJumpError が発生していたのを事前に引数をチェックして ArgumentError を発生させるように修正しています。 [ruby-core:51422] [Bug #7692]

shugo:r38812 2013-01-14 17:36:15 +0900

Enumerator#flat_map はブロックが返した値をそのまま戻り値の配列に格納するのに、Enumerator::Lazy#flat_map はその値に each を呼んで分解して格納するので、配列以外のオブジェクト(Hash など)を返すと結果が変化してしまうのを防ぐ対処をしています。 といってもブロックの返すものがさらに Enumerator::Lazy オブジェクトだとその場で配列化するのはよくないので、force と each が両方呼べることを rb_respond_to() で確認してその時は each を、そうでなければ to_ary で配列に変換し、それもできなければそのままそのオブジェクトを格納するようにしています。 [ruby-core:51401] [Bug #7690]
まあるりまを参照すると Enumerable#flat_map には 「ブロックの返り値は基本的に配列を返すべきです」と記述されてるので通常は配列を返しておくのが無難でしょう。