ruby-trunk-changes r48593 - r48609

今日はキーワード引数のエラー時の ArgumentError のバックトレースの修正、TracePoint の :line イベントが重複して呼ばれることがある不具合の修正、TracePoint の再帰チェックの高速化、malloc_increase が契機の GC をフル GC ではなく LazySweep させるようにするメモリ管理のチューニングなどがありました。
そろそろ 2.2-preview2 が出てきそうな雰囲気です。

normal: r48593 2014-11-27 07:11:54 +0900

compile.c の iseq_set_arguments() から iseq->param.size 設定部分を iseq_calc_param_size() という関数として括り出すリファクタリング

svn: r48594 2014-11-27 07:12:05 +0900

version.h の日付更新。

marcandre: r48595 2014-11-27 10:03:46 +0900

標準添付ライブラリ matrix の rdoc 用コメントの typo 修正。 https://github.com/ruby/ruby/pull/772

ko1: r48596 2014-11-27 10:56:38 +0900

メソッドの再帰ループの検出のために利用される Thread#[] のキー :__recursive_key__ を特別扱いして、st_table には入れず rb_thread_t の構造体に直接格納するようにして高速化しています。 [ruby-core:66282] [Bug #10511]

normal: r48597 2014-11-27 11:48:14 +0900

iseq.c の iseq_data_to_ary() に RB_GC_GUARD() によるコンパイラ最適化避けを追加しています。

nobu: r48598 2014-11-27 12:42:32 +0900

EnvUtil の assert_no_memory_leak で fiddle がないために LoadError が発生するケースに対応するために LoadError を捕捉して無視するようにしています。

nobu: r48599 2014-11-27 12:42:45 +0900

定数の再定義の警告メッセージのテストで assert_output を使って標準エラー出力をチェックしていたのを assert_warning を使うように変更しています。またメモリリークについてのテストのテストメソッドを分割しています。

nobu: r48600 2014-11-27 12:42:54 +0900

tool/generic_erb.rb で出力先のファイルが存在していた時に読み込む際に open に "rb" モードを指定して内容の変換がおこらないようにしています。

akr: r48601 2014-11-27 12:46:13 +0900

r48584 で TSort.tsort_each, TSort.each_strongly_connected_component, TSort.each_strongly_connected_component_from などのメソッドがブロックなしで Enumerator を返すようになったことを NEWS ファイルに追記しています。

akr: r48602 2014-11-27 12:48:42 +0900

Time.utc や Time.mktime などの 10個引数を受け付ける時に wday, yday, isdst(は Time.utc の時だけ), tz などの引数(第7から第10引数)は rdoc コメント上で dummy として利用されないように表記しています。 time_arg() をみると isdst は見てるみたいですけど、utc の時はその後 isdst が 0 に上書きされるので意味がないみたいです。

ko1: r48603 2014-11-27 13:20:14 +0900

malloc(3) がトリガーとなった GC の時にも LazySweep が有効になるようにしています。 malloc(3) でメモリ不足の時は極力メモリを回収して空きをつくるようにということですぐフルGCを実行するようになっていたのだと思いますが、今はメモリ使用量をみて GC 頻度を調節するようになっているのでこの時も Lazy Sweep するようにしているようです。このため回収が遅延してメモリ使用量が増える可能性がありますが、何か問題があったら報告してね、とのことです。2.2 の preview2 が出たらメモリ使用量を確認してみましょう。

nobu: r48604 2014-11-27 17:08:32 +0900

time.c のインデント修正のみ。

nobu: r48605 2014-11-27 17:10:21 +0900

template/prelude.c.tmpl で対象の prelude が空の時は余分なソースコードの生成を抑制するようにしています。

nobu: r48606 2014-11-27 17:12:16 +0900

miniruby 用の miniprelude.c は prelude.rb を含めないようにしています。さっきの r48605 はこの変更の伏線だったんですね。

nobu: r48607 2014-11-27 17:32:01 +0900

r48566 で template/prelude.c.tmpl で RbConfig::CONFIG の値の展開の機能を削ったので、prelude の生成に miniruby を利用する必要がなくなったということで、BASERUBY で生成するようにしています。

ko1: r48608 2014-11-27 19:15:47 +0900

メソッド呼び出し時のキーワード引数のエラーで ArgumentError が発生した時のバックトレースの位置が、メソッド定義の位置ではなくて呼び出しの位置までになってしまっていた不具合を修正しています。メソッド呼び出しの処理中に rb_raise() で例外発生させると呼び出し元のスタックフレーム上で例外発生させたことになってしまうので、例外オブジェクトを作って、一旦スタックフレームを積んでバックトレースをセットして rb_exc_raise() でその例外オブジェクトを投げるようにする raise_argument_error() という関数を追加して(というか argument_error() から拡張して)これを使うようにしています。

ko1: r48609 2014-11-27 20:06:51 +0900

TracePoint で :line イベントが同じ行で重複して呼ばれることがある不具合を修正しています。 "()" で式がまとめられている時に余分に trace 命令が作られていたようです。前の行と変更がなければ trace 命令は作らないように修正しています。 [ruby-core:65995] [Bug #10449]