ruby-trunk-changes r37342 - r37364

今日は GC::Profiler.report のメモリの使用が非効率だった問題の修正や、Fixnum/Bignum も Freeze するようにする変更のほか Psych、REXML などの不具合修正、仕様変更などがありました。

ktsj:r37342 2012-10-27 20:06:46 +0900

Struct#eql? の rdoc 用コメントのマークアップ(?) の call-seq が code-seq と typo していたのを修正。

eregon:r37343 2012-10-27 23:36:22 +0900

GC::Profiler.report で GC のプロファイル情報を出力させると内部で全出力を1つの大きな文字列を連結して作ってから出力しようとする実装なのでさらにメモリを利用してしまって再度 GC が走るという非効率な状態になっていたので、GC::Profiler.result をベースにし実装ではなくて、コールバック関数を渡して少しずつ文字列をコールバックに渡す実装を元にして report では順次出力するようにしています。(result は文字列で返すのでコールバックで文字列連結する)。 [ruby-core:47163] [Bug #6865]

nobu:r37344 2012-10-28 00:49:09 +0900

条件文のなかで代入文が書かれていた時に右辺が数値や文字列のリテラルだと警告が出力されていたのですが、この対象を配列やハッシュのリテラルにも拡げています。配列やハッシュはリテラルといっても格納されている値に式があったりしますが((文字列にも式展開がありますが)、そういったものは除外されるようです。 [ruby-dev:43083] [Feature #4299]

svn:r37345 2012-10-28 00:49:17 +0900

version.h の日付更新。

ko1:r37346 2012-10-28 04:47:58 +0900

vm_define_method() で特異メソッドの定義の時にオブジェクトの型と freeze されていないかのチェックが余分にされていたのを削っています。

ko1:r37347 2012-10-28 08:22:10 +0900

vm_insnhelper.c のインデントの修正のみです。

ko1:r37348 2012-10-28 09:03:20 +0900

昨日の r37341 での Float を freeze するようにしたのに続けて Fixnum や Bignum も Freeze するようにしています。 [ruby-core:29891] [Feature #3222]

tenderlove:r37349 2012-10-28 10:06:09 +0900

Psych で YAML を生成する時に Psych::Visitors::YAMLTree に Psych::Emitter を渡すとエラーになっていたのを修正しています。

tenderlove:r37350 2012-10-28 10:13:09 +0900

拡張ライブラリ psych の Psych::Visitors::YAMLTree#tree が2度目以降 nil を返してしまっていたので、常に Emitter の root を返すようにしています。

kou:r37351 2012-10-28 14:05:18 +0900

標準添付ライブラリ rexml の REXML::Document#write の rdoc のサンプルコードでのメソッド名の typo 修正。

kou:r37352 2012-10-28 14:10:07 +0900

標準添付ライブラリ rexml の REXML::Document#write の rdoc でのサンプルコードの間違いを修正しています。

kou:r37353 2012-10-28 14:59:59 +0900

標準添付ライブラリ rexml の REXML::Document#write がこれまで省略可能な4つまでの引数を受け取るようにしていたのを、1つの Hash オブジェクトをオプション引数のように受けつけるようにしています。これまでの引数のかわりとして使うだけで追加の新しいオプションは追加されていないので、名前つき引数のように呼べるようになったという変更です。

kou:r37354 2012-10-28 15:01:06 +0900

REXML::Document#write の rdoc 用コメントのインデント修正のみです。

kou:r37355 2012-10-28 15:43:38 +0900

標準添付ライブラリ rexml の REXML::Document#write のオプション引数に受け付けるキーを追加しています。 r37353 の段階ではオプション引数の形も受け付けるようにしただけでしたが、新規のオプションが追加されています。 :encoding というキーで出力結果のエンコーディングを指定できるようにしています。 同時に省略可能引数の形でも第5引数として受け付けるようにしています。 [ruby-dev:43750] [Feature #4872]

tadf:r37356 2012-10-28 18:53:08 +0900

拡張ライブラリ date の TIGHT_PARSER というのが定義されている時に利用されるパーサの正規表現にさらに制限を加えたりしているようです。なにやら "\024" とか "\027" とか非 ASCII 文字を埋め込んでいるようなのですが、なんでしょう。今は TIGHT_PARSER は未定義なのでこの変更は影響がないはずです。

tadf:r37357 2012-10-28 19:16:02 +0900

拡張ライブラリ date の Date.iso8601 がマッチすべきでない正規表現で空文字列がマッチしてしまって nil に対する NoMethodError が発生していた不具合修正です。 Date のアンダースコアから始まるほうのパースは空文字列を受け付けるんですね。

kou:r37358 2012-10-28 19:57:01 +0900

標準添付ライブラリ rexml の REXML::IOSource.new で入力の BOM (先頭2バイトのエンディアン指定する文字列)を見て UTF-16BE もしくは UTF-16LE の文字列を生成するところで手動でバイト列として書いていたところを String#encode を使って生成するようにしています。

kou:r37359 2012-10-28 20:20:45 +0900

で、すぐに r37358 の変更を revert しています。この部分は他にも変更が続いているようです。

kou:r37360 2012-10-28 21:19:58 +0900

標準添付ライブラリ rexml で BOM つきで ASCII-8BIT エンコーディングされた文字列を REXML::Document.new に渡した時に適切にエンコーディングが設定されるテストを追加しています。 BOM つきなのに結果は UTF-16 で BE か LE かは判定されないんでしょうか。

kou:r37361 2012-10-28 21:31:20 +0900

標準添付ライブラリ rexml で xml タグでの encoding 指定を読んだ時にソースのエンコーディングを指定するのではなくて REXML::Document.new で BOM を検出して設定するほうを優先するようにしています。

kou:r37362 2012-10-28 21:39:37 +0900

rexml のエンコーディングに関するテストを HaveEncodingTest というクラスにまとめています。

kou:r37363 2012-10-28 21:42:37 +0900

標準添付ライブラリ rexml で BOM がついていてエンコーディングが検出できていたのに xlm タグにエンコーディングの指定がなかった時に UTF-8 として扱われていた不具合を修正しています。

nagachika:r37364 2012-10-28 21:52:57 +0900

r37343 の ChangeLog エントリに ML と Redmine のチケットへの参照を追加しています。