ruby-trunk-changes r52133 - r52139

今日は Symbol から Proc を作る時の内部的な処理の修正と、require の時に GVL を何度も外していたため multi thread でのパフォーマンス低下があった問題の修正などがありました。

kazu: r52133 2015-10-15 23:37:02 +0900

r52072, r52104, r52128 の ChangeLog エントリおよび r52128 で追加したテストのコメントの typo 修正。

nobu: r52134 2015-10-15 23:56:05 +0900

r52129 で移動/修正した rb_sym_to_proc() の再修正で sym_proc_t という rb_proc_t を拡張した構造体を導入して、ここに空の env を持たせて、rb_sym_to_proc() で作る Proc オブジェクトの block.ep はこの env を指すようにしています。 Symbol#to_proc で Proc 化した時にまだ env の侵食があったようです。 [ruby-core:70980] [Bug #11566]

nobu: r52135 2015-10-16 00:54:48 +0900

r52131 の再修正。 proc.c の iseq の種類を判定するマクロに IS_METHOD_PROC_IFUNC() を追加してこれを利用するように変更しています。

svn: r52136 2015-10-16 00:54:57 +0900

version.h の日付更新。

nobu: r52137 2015-10-16 01:06:52 +0900

Proc#binding で r52135 の結果同じ分岐が2回現れるようになっていたので1回にまとめています。

nobu: r52138 2015-10-16 12:21:10 +0900

Symbol から Proc を作るための sym_proc_t を使ってオブジェクトを作る関数 sym_proc_new() を追加して、r52134 で rb_sym_to_proc() に追加した処理を切り出して、さらに その時の block.iseq には Symbol の VALUE の値をそのまま入れておくようにしています。このため Proc の処理で ifunc かどうかで分岐していたところは Symbol かどうかで分岐するようにしています。結構影響範囲のでかい変更ですね。

nobu: r52139 2015-10-16 15:54:38 +0900

r50887 で fifo から require しようとするとインタプリタ全体がブロックするのを避けるため require で load できるファイルを探すために open する時に GVL を外すようにしたところ、multi thread での require が遅くなっていたので、GVL 外しはやめて O_NONBLOCK または O_NDELAY フラグをつけて open(2) するようにしています。NONBLOCK って open にも効くんだ。 [ruby-dev:49272] [Bug #11559]