ruby-trunk-changes r47179 - r47193

今日は RGenGC のための write barrier の処理が本来対象とするべきではない場所でも行なわれていた不具合の修正や、標準添付ライブラリ gserver の削除、README.EXT に RB_GC_GURAD() についての説明が追加されるなどの変更がありました。

akr: r47179 2014-08-14 22:10:07 +0900

r46977 でリンク切れのため削除した compat_common_month_table のテーブルについてのコメントを revert して戻して、リンクは internet archive へ変更しています。 [ruby-core:63857] [Bug #10071]

normal: r47180 2014-08-15 05:55:27 +0900

README.EXT の Appendix E として RB_GC_GUARD() についてのドキュメントを追加しています。 おお。 [ruby-core:60741] [Bug #10100]

svn: r47181 2014-08-15 05:55:39 +0900

version.h の日付更新。

normal: r47182 2014-08-15 06:10:06 +0900

vm.c の rb_thread_mark() で method entry の mark についてのコメントを変更しています。詳細はリンク先のメールを確認してもらいたいですが bitmap marking してもあんまり効果はないと思うよという内容に変更されています。

normal: r47183 2014-08-15 08:12:04 +0900

cont.c の CAPTURE_JUST_VALID_VM_STACK が未定義の時(ソースコード内で定義されているので実質コメントアウトされたコード)の関数呼び出しの typo 修正。

nobu: r47184 2014-08-15 08:32:06 +0900

ripper の警告用のマクロ/関数に ripper_warnV() など V で終わる名前のシリーズを追加して、埋め込む文字列を char* でなく VALUE で String オブジェクトのまま渡せるようにしています。

normal: r47185 2014-08-15 09:17:53 +0900

thread_pthread.c で pthread_mutex_t や pthread_mutex_lock/unlock() 関数を直接使っていたところを rb_nativethread_lock_t や native_mutex_lock/unlock() などの generic な wrapper 関数を利用するように修正しています。 また mutex や cond の初期化のためのマクロ RB_NATIVETHREAD_LOCK_INIT と RB_NATIVETHREAD_COND_INIT も導入しています。 [ruby-core:64364] [Feature #10134]

normal: r47186 2014-08-15 09:25:34 +0900

もはや恒例となってきた構造体のサイズ節約のためのアライメントを意識したメンバの順番変更です。 cont.c の rb_context_t と rb_fiber_t、vm_core.h の rb_thread_t でそれぞれ 64bit 環境でのサイズ削減をしています。

hsbt: r47187 2014-08-15 10:21:18 +0900

標準添付ライブラリの gserver を削除しています。メンテナンスされていないので gem に追い出したそうです。 またこれを利用していた xmlrpc の HttpServer も削除しています。なんだこれ…。 [ruby-core:40313] [Feature #5480]

nobu: r47188 2014-08-15 12:00:31 +0900

gc.c の obj_memsize_of() で T_NODE 型のオブジェクトのメモリ使用量により正確な値を返せるようにしています。

ko1: r47189 2014-08-15 19:32:58 +0900

Array オブジェクトを使ってリークを気にせずに一時利用のためのバッファを確保するための rb_ary_tmp_new() に Qnil で初期化して capa ぶんのサイズを持つ配列として初期化も行う rb_ary_tmp_new_fill() という関数を追加しています。 そして node.h で NEW_MEMO_FOR() マクロの定義でこれを利用して初期化済みの配列オブジェクトを生成するようにしています。初期化されないまま配列のサイズを伸ばしていたっぽいですね。

ko1: r47190 2014-08-15 19:37:42 +0900

string.c と symbol.c にある同名の static 関数 setup_fake_str() (引数が異なっていて string.c のものには encindex の指定もある)で RBASIC_SET_CLASS() を呼んでいたため RGenGC のための write barrier で RVALUE 値の書き込みをしてしまっていたので WB なしの RBASIC_SET_CLASS_RAW() を利用するようにしています。 fake_str は主にスタック上の自動変数の struct RString を String オブジェクトとして使えるようにしたもので、GC の対象である struct RVALUE の slot に入っているものではないので WB 処理を入れるのは不正でした。 2.1 にも必要とのこと。 [Backport #10139]

ko1: r47191 2014-08-15 19:39:27 +0900

iseq.c の rb_iseq_clone() でも rb_iseq_c を VALUE 型を渡すべき RB_OBJ_WRITE() の第1引数に渡してしまっていたので iseq->self を渡すように修正しています。 [Backport #10140]

suke: r47192 2014-08-15 20:36:12 +0900

拡張ライブラリ win32ole のソースから WIN32OLE_EVENT の実装部分を win32ole_event.(hc) に分離しています。

svn: r47193 2014-08-15 20:36:25 +0900

r47192 で新規追加されたファイルの svn property 設定。