ruby-trunk-changes r47614 - r47624

今日は標準添付ライブラリ uri の opaque 対応、メソッドキャッシュのサイズを指定する環境変数 RUBY_GLOBAL_METHOD_CACHE_SIZE の対応などがありました。

naruse: r47614 2014-09-17 23:15:03 +0900

標準添付ライブラリ uriURI の opaque という部分を受け付ける正規表現を追加しています。 opaque ってどういうものかよくわからないのですが、URI の仕様(RFC 3986)で存在しているけど、普通よくみる http://host/path みたいなホスト名とパスがあるような URI で利用するものではなくて、テストコードをみると scheme:opaque みたいに opaque だけで使うものみたいです。 ここに "/" は含まれないようにしています。 https://github.com/ruby/ruby/pull/718

naruse: r47615 2014-09-17 23:53:08 +0900

r47598 の Onigmo のマージで r43023 の変更が巻き戻されてしまっていたので再適用しています。

normal: r47617 2014-09-18 06:20:58 +0900

拡張ライブラリ socket の Socket#connect で connect でのブロックを避けるため rb_wait_for_single_fd() で select/poll で fd が接続可能になっていることを確認しているところで、WinSock 向けの workaround として? ループを回していたのを、rb_wait_for_single_fd() 内部でリトライしているとのことでループを外してシンプルにしています。コミットログをよむともはや non blocking socket を使って block する挙動を実装するようにしていないので不要な処理をやめた、みたいに書かれています。 [Bug #9356]

svn: r47618 2014-09-18 06:21:26 +0900

version.h の日付更新。

normal: r47619 2014-09-18 07:01:31 +0900

拡張ライブラリ zlib の struct gzfile でメンバの順番入れ換えで構造体サイズの shrink をしています。

normal: r47620 2014-09-18 07:05:22 +0900

rb_str_modify() でのメモリリーク修正についてのテストで、jemalloc() を利用していると、開放したメモリを OS になかなか返さない性質のために assert_no_memory_leak の閾値を越えやすいそうなので、:limit オプションで閾値を上げて条件を緩和しています。 [ruby-core:65018] [Bug #10236]

nobu: r47621 2014-09-18 09:36:37 +0900

global method cache の配列サイズを環境変数 RUBY_GLOBAL_METHOD_CACHE_SIZE で指定できるようにしています。ただし実装上の都合から 2 の累乗のサイズしか指定することができません。 https://github.com/ruby/ruby/pull/719
なるほどなー、確かによく使われるメソッド数はアプリケーションによって異なるでしょうし、チューニングできるポイントなんですね。

naruse: r47622 2014-09-18 10:30:09 +0900

リリース時のパッケージファイルを所定の位置に配置するツール(つまりこれを使うのは ruby をリリースする人だけです) tool/release.sh に .tar.xz のパッケージも対象になるように追加しています。 r45934 でパッケージ作成時に .tar.xz のファイルも作成するようになったので、それに追随しています。

usa: r47623 2014-09-18 15:03:24 +0900

rubygems のテストでファイルパスのチェックで Windows の考慮が漏れていたところを修正しています。 "/" ではじまるパスは Windows ではそれだけでは絶対パスではないので、File.expand_path を通すようにしています。なるほど "/path" のようなのをあえて File.expand_path を通すというのはポータビリティのための Tips になりますね。

usa: r47624 2014-09-18 16:30:19 +0900

rubygems のテストで Encoding.default_external が既に生成済みの StringIO には影響しないために、@ui オブジェクトに直接 external_encoding= でエンコーディングを設定するようにしています。 default_external が US-ASCII もしくは UTF-8 だと発生しない問題とのことでこれも多分 Windows 環境でのテスト失敗の修正だと思います。