ruby-trunk-changes r37688 - r37700

今日は Windows 版での File.expand_path の不具合修正、Psych の不具合修正、require の並列実行を防ぐロックでの不正メモリアクセスが起こりうる不具合の修正などがありました。

marcandre:r37688 2012-11-17 01:55:29 +0900

標準ライブラリ内で inistance_variable_{get,set} や const_set などの名前の指定文字列を使っていたところを Symbol に変更しています。 [ruby-core:47979] [Bug #7161]

nobu:r37689 2012-11-17 02:02:35 +0900

インデントの修正のみ。

nobu:r37690 2012-11-17 02:02:37 +0900

VM の命令の利用統計情報を収集する処理の DTrace のプローブのところで一時的に生成される文字列オブジェクトが GC のマーク漏れで解放される恐れがあったので RB_GC_GUARD() を追加しています。

nobu:r37691 2012-11-17 02:02:39 +0900

DTrace のプローブ用のヘッダ probes.h を生成する際に DTRACE_PROBES_DISABLED の定義をするようにして rb_obj_alloc() でのオブジェクト生成時のプローブは DTrace が有効なときだけ追加されるようにしています。もともと DTrace が無効な時は消えるようにできているはずですが、ここは if のブロック内に変数の宣言があって、消えるとそれが未使用としてコンパイラの警告に出てしまっていたようです。

luislavena:r37692 2012-11-17 07:43:22 +0900

Windows 版の File.expand_path のファイルパスを ロングファイルネーム(LFN) というパスに変換する処理があり*1、その時にパスの最後にワイルドカード(アスタリスク)があるとそれが除かれてしまうらしくて意図しない結果になるので、処理をスキップするようにしています。 [ruby-core:49451] [Bug #7374]

eregon:r37693 2012-11-17 08:14:38 +0900

標準添付ライブラリ abbrev の rdoc のサンプルコードの間違いの修正など。

tenderlove:r37694 2012-11-17 11:28:48 +0900

拡張ライブラリ psych の Kernel#y (YAML 形式でダンプ)を ext/psych/lib/psych/y.rb に切り出しています。 require "psych/y" でそこだけ Kernel#y だけ require できるようになっています。が Psych がロード済みじゃないと使えないので "psych/y" だけ require しても実は使えません。これ何の意味があるんでしょう。

nobu:r37695 2012-11-17 11:29:04 +0900

新規追加されたファイルの svn property 設定。

shirosaki:r37696 2012-11-17 11:46:13 +0900

st_update() で st_table の内容を更新する時に key として引数に渡したものを格納しなおしていたのですが、 require のロックのために利用していたところで st_update() に渡した文字列のメモリが解放される可能性がありました。 st_update() は引数に渡した key ではなくて、元々 st_table に格納されていたほうの key を再度利用するようにしています。 st_update() は元々対応する key が存在しなかったら新たに追加するので、その時は引数の key が利用されるわけで、key が常に検索のためだけに利用されるわけではなく st_update() に渡す key は解放してもかまわないと言いきれないのですが、そもそも st_table はそういう使われかたを想定していないと思うので require ロックのほうにコメントされていたほうがいいような気がします。 [ruby-core:49220] [Bug #7330]

tenderlove:r37697 2012-11-17 12:11:22 +0900

拡張ライブラリ psych が YAML の数値から始まる文字列や "." だけからなる文字列をパースしようとすると誤って Integer/Float として処理しようとして例外が発生していた不具合を修正しています。正規表現でチェックする時に不正なものもマッチしてしまっていたのでその修正と、"." だけの時の処理を別途追加しています。これを読んでて気がついたのですが、Psych.load は数値を "," や "_" で桁を区切ったものを受け付けるんですね。
[追記] Psych は 1.1 ということなので 1.1 の仕様書を見てみましたが、こっちはよくからなかったです。 http://yaml.org/spec/1.1/current.html#id903915 ) [/追記]
YAML の Spec をみてもそれらしい記述はないので Psych の拡張のようです。 (参考URL: http://yaml.org/spec/1.2/spec.html#id2803828 ) [ruby-core:44426] [Bug #6312]

tenderlove:r37698 2012-11-17 12:15:54 +0900

拡張ライブラリ psych の YAML ダンプで複数行の文字列を出力する際に YAML の literal block の記法を利用するようにしています。 (参考URL: http://yaml.org/spec/1.1/current.html#id926836 )

eregon:r37699 2012-11-17 20:07:05 +0900

benchmark/driver.rb のメッセージの typo 及びエラー時の余分なフォーマット文字列で目的のメッセージが出力できていなかった不具合を修正しています。

luislavena:r37700 2012-11-17 21:46:17 +0900

r37692 の Windows 版の File.expand_path の修正の追加で、末尾の "*" だけチェックしていたのを全てのワイルドカード文字(といっても文字種は "*" と "?" だけ)の存在をチェックするようにしています。 [ruby-core:49451] [Bug #7374]

*1:おそらく HOGEHO~1.txt みたいな DOS 風の(?)文字数制限ありのパスを hogehoge.txt と通常目にするパスに直すということではないかと。