ruby-trunk-changes 2019-10-29

今日は GC.compact 関連の修正や、内部的に使う一時オブジェクトの Array や Hash をあらかじめ必要なサイズのバッファを指定して作るようにする最適化などがありました。

[6e0b40af3d] Nobuyoshi Nakada 2019-10-28 09:31:00 UTC

.github/workflows/ の各種ビルドでソースディレクトリ以外でのビルドをするようにしているようです。

[aec16b7540] Aaron Patterson 2019-10-08 00:41:26 UTC

st_table の mark 時に key も value もどちらも pin して GC.compact で移動不可にするようにしています。 Marshal 時の影響で pin が必要になっちゃうみたいです。

[a51583b678] git 2019-10-28 18:19:25 UTC

version.h の日付更新

[339a891c7d] Aaron Patterson 2019-10-08 20:15:44 UTC

RubyVM::InstructionSequence の配列からの構築時に内部的に使う st_table を wrap したオブジェクトの mark 処理に rb_mark_set() を指定して pin するようにしています。mark_st のまちがい? じゃなくて key だけ pin する時の関数ですね。

[bbf3de22b6] Aaron Patterson 2019-10-08 20:35:24 UTC

RubyVM::InstructionSequence#to_a や #disasm で処理中にラベル情報を管理するために確保する st_table をオブジェクトで wrap して rb_mark_set() で mark することで key を pin して GC.compact で移動されないようにしています。

[6147fa82a9] Aaron Patterson 2019-10-14 21:52:58 UTC

Continuation の GC.compact 対応で rb_context_t から self でオブジェクト自体を逆参照していたものを GC.compact の移動に追随させるように修正しています。

[60a7f9f446] Aaron Patterson 2019-10-17 18:37:32 UTC

finalizer のリストを linked list で管理していたのを Array オブジェクトを使って管理することで実行中に mark されるようにしています。

[da3774e5eb] Aaron Patterson 2019-10-28 23:14:50 UTC

と思ったら 60a7f9f446604571f8a81499080c57c47baf0e6b は revert しています。 finalizer 対象のオブジェクトを通常のオブジェクトから参照すると T_ZOMBIE に変更されたオブジェクトを参照することになって GC の mark 処理で assertion にひっかかるため。

[b4229c0a90] Nobuyoshi Nakada 2019-10-28 23:58:39 UTC

後置 in の記法 expr in key で右辺がキーワード引数の時に、さらにその後の同じ行に(?)キーワード引数があり、さらにそのキーと値の間に改行が含まれていた時文法エラーになっていたのを修正。

[0547627705] aycabta 2019-10-29 01:34:32 UTC

標準添付ライブラリ reline のバージョンを 0.0.4 に更新。

[65744fb19e] Lourens Naudé 2019-10-21 21:31:44 UTC

compile.c の関数マクロ DECL_BRANCH_BASE() で一時バッファとして rb_ary_tmp_new() で確保する配列は要素数5まで使うとわかっているので最初から capa 5 で確保するようにしています。

[4480d68931] Lourens Naudé 2019-10-21 22:28:41 UTC

iseq.c の make_compile_option_value() で一時的に使う Hash も rb_hash_new_with_size() で要素数 11 ぶんのバッファを確保するようにしています。

[0e68913f81] Lourens Naudé 2019-10-21 22:31:46 UTC

Enumerator::Lazy#to_enum に Symbol を渡した時の不具合修正として a7d7a0df91805e59fe6b383ea7ecdad509222966 で InitVM_Enumerator() で Enumerable への alias を生成するために作る Hash オブジェクトもあらかじめ必要な数の要素数のバッファを指定して作るようにしています。しかしこの数は今後変化しそうだなぁ。

[0095362918] Lourens Naudé 2019-10-21 22:49:54 UTC

vm.c の vm_default_params() でも一時的に使う Hash オブジェクトをあらかじめ 4要素で作っておくようにしています。

[fecaa6e946] Lourens Naudé 2019-10-21 23:03:05 UTC

vm_backtrace.c の backtrace_collect() でも一時的に使う配列の capa をあらかじめわかっている要素数にあわせて作るようにしています。

[85b88c1d89] Lourens Naudé 2019-10-21 23:18:37 UTC

class.c の class_instance_method_list() および rb_obj_singleton_methods() でもあらかじめわかっているメソッド数ぶんの capa で配列を作成するようにしています。

[b86e5c9fec] John Hawthorn 2019-10-29 00:24:07 UTC

コンパイラの拡張 attribute の __nonnull__ が使える時に rb_funcallv() を rb_funcallv_with_cc() を使って呼び元での call cache を有効にする preprocessor 分岐を clang でも有効にしています。

[54eb51d72b] Nobuyoshi Nakada 2019-10-29 03:12:07 UTC

b86e5c9fec9d9ea0f9c70d9b20456680607399b3 のチェック clang かどうかとか gcc のバージョンによって判定するのではなく configure 時に __nonnull__ が使えるかどうかより具体的にチェックするようにしています。

[b4da6fc1c2] aycabta 2019-10-26 17:28:25 UTC

標準添付ライブラリ rdoc のテストで skip のかわりに test-unit の omit を使うようにしています。

[c8ce37d427] aycabta 2019-10-27 16:44:09 UTC

標準添付ライブラリ rdoc のオプションで指定するファイルパスで Windows 環境で異なるドライブレターのファイルパスをサポートしているらしい。ちょっと差分をみてもよくわからない。

[9525541d02] aycabta 2019-10-28 04:39:37 UTC

標準添付ライブラリ rdoc のテストで生成したファイルパスを Windows の long path に変更する(Windows のファイル名は8文字に切り詰める short path というのが別名みたいにあって、どうも File.expand_path ではそっちの名前になってしまうらしい)ため Dir.glob を一度通すようにしています。うへー。

[ca5812fe45] Yusuke Endoh 2019-10-29 03:57:31 UTC

b4da6fc1c277190bbd10e795ebf3be45772038e8 の rdoc のテストで omit を使うようにした変更を revert。 make test-all でも minitest が使われる(あれ、そうだっけ)ので omit は使えなかったため。

[1820aeeeb2] Yusuke Endoh 2019-10-29 04:15:09 UTC

tool/lib/minitest/unit.rb で skip の alias として omit を追加しています。

[79a7fd9120] Yusuke Endoh 2019-10-29 04:16:31 UTC

ということで b4da6fc1c277190bbd10e795ebf3be45772038e8 を revert した ca5812fe4516a10cc687281f9e47e1a08449f1ab を revert して、やっぱり rdoc のテストで omit を使うようにしています。

[7bf51ced55] Yusuke Endoh 2019-10-29 05:34:31 UTC

rubygems のテストで一時ディレクトリに Gemfile があるとうまくテストが動かないのでファイル先頭でこのファイルが存在しないかチェックして、存在してたらトップレベルで例外を起こしてすぐ終わらせるようにしています。

[9195ed18ca] 卜部昌平 2019-10-29 07:05:39 UTC

54eb51d72bc43f90b595f0d7ffb5069ebf1a56d9 の configure でコンパイラ拡張の attribute __nonnull__ が使えるかどうかチェックするようにした影響で Windows でのビルドがエラーになってたそうなので revert しています。

[ad4da86669] Nobuyoshi Nakada 2019-10-29 03:12:07 UTC

54eb51d72bc43f90b595f0d7ffb5069ebf1a56d9 のリトライ。 include/ruby/defines.h に fallback 用マクロ RUBY_FUNC_NONNULL() の定義を追加しています。