ruby-trunk-changes r32273 - r32285

今日は Matrix に機能追加で新規メソッドがたくさん入ってます。また Module#const_get の不具合修正に tracer.rb の不具合修正などがありました。

keiju:r32273 2011-06-28 23:46:57 +0900

tracer.rb が gem_prelude.rb の廃止によって -rtracer とコマンドラインオプションで指定して読み込んだ時に自動的に Tracer.on にならなくなっていた不具合を修正。と、思いきやこれだと require しただけの時も Tracer.on になってしまうんです。あと --disable-gems の有無でもちょっと違うのが曲者で……。

ko1:r32274 2011-06-29 06:17:29 +0900

タイマースレッドやシグナルハンドラ内で利用できるようにした rb_async_bug_errno() という [BUG] を表示するための関数を追加しています。 fprintf(3) を避けて write(2) で出力し、バックトレースの取得も省いています。 [ruby-core:37644] [ruby-core:37647]

svn:r32275 2011-06-29 06:17:34 +0900

version.h の日付更新。

ko1:r32276 2011-06-29 06:23:40 +0900

タイマースレッドへの通知用の pipe を close する時に race condition があるそうなので明示的に close しないようにしています。プロセスの終了により自動で閉じられることを期待しています。

marcandre:r32277 2011-06-29 10:08:02 +0900

Matrix#each と Matrix#each_with_index に引数を追加して、全ての要素を巡回する元々の挙動の他に、対角要素だけ巡回したり対角線の下半分だけ巡回する、などのブロックに渡す要素を限定する指定ができる機能を追加しています。仕様を明確にするためにもテストが欲しいですね。

marcandre:r32278 2011-06-29 10:09:46 +0900

Matrix#index, Matrix#find_index というメソッド(find_index は index の alias)を追加しています。引数に渡されたオブジェクトと Object#== で一致するか、ブロックが渡された場合は要素をブロックに渡して呼び出した結果が true になる要素の位置を [row, col] という配列で返す Array#index の Matrix 版のようなメソッドです。ブロックも省略すると Enumerator を返します。またこのメソッドも r32277 で Matrix#each に追加したような指定で探す範囲を限定できるようになっています。テスト……。

marcandre:r32279 2011-06-29 10:11:19 +0900

Matrix#diagonal? Matrix#hermitian? Matrix#lower_triangular? Matrix#normal? Matrix#orthogonal? Matrix#permutation? Matrix#symmetric? Matrix#unitary? Matrix#upper_triangular? Matrix#zero? といった Matrix の性質を調べて返すメソッドを追加しています。テス……ぐふっ
ちなみに permutation matrix って何だったっけと思いましたが、正方行列のうちどの行、列をみても1つだけ1であとは0になってるような行列でした。

marcandre:r32280 2011-06-29 10:13:22 +0900

Matrix.zero(全ての要素が 0 の Matrix を作る)に省略可能な第2引数を追加して、正方行列以外も作れるようにしています。また Vector#r (Vector の norm を計算するメソッド)を Matrix#magnitude として定義して Matrix#r は magnitude の alias にしています。

drbrain:r32281 2011-06-29 12:09:34 +0900

rdoc 用のコメント、ドキュメント追加や整形の抑制用のコメントの追加などを行なっています。

nobu:r32282 2011-06-29 12:35:48 +0900

最近追加されたファイルの svn の property 変更です。

matz:r32283 2011-06-29 14:20:37 +0900

Module#const_get で第2引数が false(継承ツリーを辿らない)の時に Object の場合だけ特別扱いしていたことに起因して、取得できないはずの定数が取得できてしまうケースがある不具合を修正しています。 [Bug #3422] [Bug #3423]

nagachika:r32285 2011-06-29 22:19:59 +0900

r32273 の tracer.rb の Tracer.on の呼び出し部分再修正。 -r オプションでロードした時だけ Tracer.on を実行するようにしています。また --disable-gems で rubygems を無効にした時には条件を変えないといけなかったので define?(Gem) で場合分けしています。かなり泥臭い方法でまた require 周辺が変わると壊れそうですから何か良い方法はないものでしょうか。