ruby-trunk-changes r42862 - r42871

今日は thread.rb を C 実装の拡張ライブラリに置き換える変更、TCPServer のソケットオプション TCP_FASTOPEN のサポート追加、case 文のマッチの "===" が Refinements を考慮していなかった不具合修正などがありました。

glass:r42862 2013-09-07 00:15:07 +0900

標準添付ライブラリ thread.rb で実装されていた Queue, SizedQueue, ConditionVariable などを C で再実装して拡張ライブラリにしています。 あと common.mk で INSTRUBY が ${MINIRUBY} ではなく ${RUNRUBY} を使って ruby スクリプトを実行するようにしています。 miniruby だと拡張ライブラリがロードできない問題があったため。[ruby-core:31513] [Feature #3620]

svn:r42863 2013-09-07 00:15:13 +0900

version.h の日付更新。

nobu:r42864 2013-09-07 03:08:55 +0900

r42858 と r42862 で新規追加されたディレクトリの svn property 設定。

akr:r42865 2013-09-07 10:41:47 +0900

拡張ライブラリ socket で setsocketopt に使う定数 TCP_FASTOPEN を追加して、TCP ソケットの fast open という機能を利用可能にしています。 [ruby-core:57048] [Feature #8871]
fast open とは接続時の handshake を簡素化して高速化する方法みたいです。 参考URL: http://lwn.net/Articles/508865/

ktsj:r42866 2013-09-07 13:34:27 +0900

標準添付ライブラリ find の Find.find でファイル名のエンコーディングファイルシステムエンコーディングとして不正な文字を含んでいるとパス名が化けるという問題があり、Find.find が常にファイルシステムエンコーディングを使っていたところを、引数に渡した文字列のエンコーディングを優先させるように変更しています。 [ruby-dev:47530] [Feature #8657]

ktsj:r42867 2013-09-07 13:58:38 +0900

r36577 で Module#name の変更をした際に fatal エラーが無名クラスの例外として見えてしまって "fatal" という名前が取れなくなっていた不具合を修正しています。classname() で __classid__ と __tmp_classpath__ という内部的なインスタンス変数がセットされていない時は nil を返していたのですが、__classid__ に "fatal" などの名前が入っているケースがあるので、その時は __tmp_classpath__ がなくてもその名前を返すようにしています。 r36577 ってことはこれは 2.0.0 でも起きてますね。バックポートチケットを作っておかねば……

ktsj:r42868 2013-09-07 13:58:40 +0900

doc/security.rdoc の typo 修正。

charliesome:r42869 2013-09-07 15:44:31 +0900

case 文で when の値とマッチさせる時には "===" メソッドで判定するのですが、これが Refinements による上書きを考慮していなかったので rb_method_entry_with_refinements() で Refinements の影響を考慮して呼び出すメソッドを探索するように修正しています。なるほどー、これは微妙なところですけど不具合扱いですかねぇ。 [ruby-core:57051] [Bug #8872]

akr:r42870 2013-09-07 20:26:52 +0900

Math.log, log2, log10 で 2**1024 以上の Bignum も処理できるようにあらかじめ右shiftしておいて、後でそのぶん加算するようにしています。

akr:r42871 2013-09-07 21:34:09 +0900

r42870 の追加修正で Bignum の時に符号が正であることもチェックするようにしています。