ruby-trunk-changes r61324 - r61337

今日は利用されない空 Hash リテラルの最適化が副作用のある式を捨てるケースがあった不具合の修正や拡張ライブラリ psych の更新で YAML.load のインターフェースの変更などがありました。

ngoto: r61324 2017-12-19 00:46:56 +0900

Solaris 10 上で Oracle Solaris Studio 12.4 でコンパイルすると、条件演算子の2つの式で型が異なるというのでコンパイルエラーになるそうなので、eval_error.c の write_warn_xxx() の定義で明示的な (void) のキャストを追加しています。

svn: r61325 2017-12-19 00:46:57 +0900

version.h の日付更新。

ngoto: r61326 2017-12-19 01:17:17 +0900

同じく Solaris で #include は使えないそうなので missing/stdbool.h という独自のヘッダファイルを追加して、なかったらこっちを include するようにしています。うーむ、なるほど。 [ruby-dev:50366] [Bug #14200]

eregon: r61327 2017-12-19 01:41:48 +0900

rubyspec の IO#select のテストで書き込み時に IO のバッファをバイパスするために IO#write のかわりに IO#syswrite を使うように修正しています。

nobu: r61329 2017-12-19 09:45:55 +0900

Hash リテラル内の {**v} のように "**" で Hash オブジェクトを展開する記法で、結果が使われない空 Hash リテラルの最適化で消えてしまって、v の部分に副作用のある式があっても実行されないという不具合を修正しています。 [ruby-core:84340] [Bug #14201]

nobu: r61330 2017-12-19 10:08:52 +0900

Array#- で receiver の配列サイズが小さい時には Hash を使わずに直接ループで比較するという最適化をしていましたが、引数のほうが小さい時もこの最適化を行うようにしています。 んーしかし receiver がとても大きな配列で引数が小さい時は、小さい配列の rb_ary_includes_by_eql() を非常に多い回数ループを回すことになるので、なんとなくコストは非対称な気がするんですがどうなんでしょう。 https://github.com/ruby/ruby/pull/1756

nobu: r61331 2017-12-19 11:41:37 +0900

r61329 の再修正。 ** の展開がある時に利用されない Hash リテラルの最適化を抑制してましたが、結果が利用されない場合は ** の splat 処理も省いて、その右辺値(っていうのかな)の結果を捨てる pop 命令を入れるようにしています。余計な Hash オブジェクトの生成を抑制するためだと思いますが、うーん最初の hunk の poped じゃない時の swap の抑制をしてもいいのかがよくわからない。 [ruby-core:84340] [Bug #14201]

hsbt: r61332 2017-12-19 11:43:09 +0900

ext/digest/digest.gemspec は削除しています。 digest は default gem 化は一旦とりやめみたいです。 gem install でのヘッダファイルのインストールが必要だけど、うまくいかないようです。

hsbt: r61333 2017-12-19 12:12:22 +0900

拡張ライブラリ strscan の gemspec ファイルのバージョンを 1.0.0 に更新しています。
ただ、rubygems.org が strscan を標準添付ライブラリと同名ということでロックしているみたいで、まだリリースはできてないみたいです。 https://github.com/rubygems/rubygems.org/pull/1696

nobu: r61334 2017-12-19 12:17:37 +0900

r61312 の tool/vcs.rb の VCS::GIT#commit で git svn dcommit に --add-author-from オプションをつけるようにした変更で、author が committer と同じ場合は抑制するようにしています。なるほど別の人のパッチをコミットする時に From: 行を付けるようにしたいからなのか。

nobu: r61335 2017-12-19 13:57:20 +0900

KeyError#receiver と KeyError#key メソッドの rdoc 用コメントを追加しています。

hsbt: r61336 2017-12-19 18:44:33 +0900

拡張ライブラリ psych を upstream から 3.0.2 をマージしています。 YAML.load や YAML.parse の省略可能な第2引数 fallback を、キーワード引数に変更しています。これにより第2引数をつけて呼び出していたところではエラーになるので非互換になると思います。 https://github.com/ruby/psych/issues/340

nobu: r61337 2017-12-19 19:46:51 +0900

thread_sync.c で rdoc によるドキュメントが正しくつくようにダミーの(コメントアウトされた) rb_define_class() や rb_define_class_under() の呼び出しをマクロ経由にしたりしています。