ruby-trunk-changes 2020-11-06

今日は GC と Ractor まわりの修正と T_DATA 型のオブジェクトの一部を Ractor#send で copy 可能にする変更などがありました。

[b29fe5eb2d] "NARUSE, Yui" 2020-11-05 11:51:17 UTC

Object#__send__ の rdoc 用コメントに send より __send__ のほうが再定義されてないことが期待できるのでより安全なので良いという追記をしています。

[3407b7d8a6] "NARUSE, Yui" 2020-11-05 11:54:34 UTC

4dba0c1a8e3cc08664872e637099c4e7d58d24d3 で標準添付ライブラリ内で __send__ を send に戻してたのを revert しています。

[8014ed9bd2] Soutaro Matsumoto 2020-11-05 15:11:48 UTC

bundled gems の rbs と typeprof のバージョンを更新しています。 https://github.com/ruby/ruby/pull/3732

[193edbde91] git 2020-11-05 15:12:16 UTC

version.h の日付更新

[68a3a2d90f] Aaron Patterson 2020-11-05 16:51:40 UTC

gc.c の gc_double_heap_size() および gc_sort_heap_by_empty_slots() で heap_eden の page リストを操作する時に RB_VM_LOCK_ENTER()/RB_VM_LOCK_LEAVE() で排他処理するようにしています。

[ab5f2fa4fb] Aaron Patterson 2020-11-05 19:13:04 UTC

68a3a2d90f96b46e5c20659ea3eef3f554fbf542 の変更は revert して呼び元の gc_verify_compaction_references() 内で page の追加などを行なうようにしています。また gc_verify_compaction_references() の未使用の引数は消して rb_objspace_t を渡すようにしています。

[d8da5c1983] Aaron Patterson 2020-11-05 20:27:09 UTC

gc_sort_heap_by_empty_slots() 内の GC_ASSERT() を assert(3) に置き換えています。デバッグのためみたいですね。

[6d17c9fa5d] Aaron Patterson 2020-11-05 20:28:50 UTC

gc_sort_heap_by_empty_slots() の最初に gc_rest() を呼び出して GC 完結させてたのを呼び元の gc_verify_compaction_references() で無条件に呼ぶようにしています。heap_add_pages() の前に呼ぶようにしたのがキモかな? d8da5c198348eac3d3d7a3e13dfb8a9351ed07ae で assert() にしていたのがこの修正のためかな(戻してないですが)。

[4948982b53] Yusuke Endoh 2020-11-06 04:28:58 UTC

bundled gems の typeprof のバージョンをさらに更新しています。

[7718e9588b] Koichi Sasada 2020-11-05 18:21:08 UTC

Ractor#send で別の Ractor に共有するオブジェクトに T_DATA 型のオブジェクトのうち参照しているオブジェクトが shareable なものだけとわかっている場合には copy 可能にしています。

[037803e092] Hiroshi SHIBATA 2020-11-06 08:42:57 UTC

標準添付ライブラリの net/xxx 群の gemspec ファイルに net-protocol.gem (net/protocol) への依存関係を追加しています。

ruby-trunk-changes 2020-11-05

今日は標準添付ライブラリ un の default gem 化や T_OBJECT 型のオブジェクトの生成時にインスタンス変数埋め込みのフラグを立てるのを徹底する変更などがありました。

[a8581ce673] Aaron Patterson 2020-11-04 19:33:59 UTC

rb_newobj_of() でオブジェクト生成する時に T_OBJECT 型の時に flags に ROBJECT_EMBED を立てておくようにしています。インスタンス変数が埋め込み状態と明示されるようにする変更の一環ですね。

[70680feeea] Aaron Patterson 2020-11-04 20:04:23 UTC

T_OBJECT 型オブジェクトのインスタンス変数セットの処理 obj_ivar_set() でバッファのサイズで判定して遅延して flags の ROBJECT_EMBED をセットしているのを消しています。オブジェクト確保時点で ROBJECT_EMBED をセットするようにしたので不要になったということでしょう。

[9232f91827] git 2020-11-04 22:41:17 UTC

version.h の日付更新

[6f24be8565] Marc-Andre Lafortune 2020-11-04 21:01:37 UTC

ee7cc6ac35cfb056b3946b1dcd6d4d5a140ccacf で標準添付ライブラリ ostruct の OpenStruct#marshal_load を public に戻す変更を revert しています。元々 alias にした時に accidental に private になったから戻したという変更みたいでしたが、なんでかな。

[015b023820] Marc-Andre Lafortune 2020-11-04 21:09:51 UTC

標準添付ライブラリ ostruct の OpenStruct クラスの rdoc 用コメントのサンプルで private メソッドを呼ぶのに Object#__send__ メソッドを使うように書き換えられてたのを send を使うように戻しています。うーん? お作法的には __send__ を使うほうがより良いのでは。

[2aa9a50dcc] Marc-Andre Lafortune 2020-11-04 21:11:56 UTC

標準添付ライブラリ ostruct の定数 OpenStruct::VERSION を "0.3.1" に更新しています。

[4dba0c1a8e] Benoit Daloze 2020-11-05 10:23:27 UTC

標準添付ライブラリ forwardable, irb, un などで Object#__send__ を使うようにしたのを send に戻しています。うーん、これもわざわざ戻すほどのことではないような気がするけど。

[b2ca183cc9] Hiroshi SHIBATA 2020-11-05 11:21:02 UTC

標準添付ライブラリ un を default gem 化しています。

ruby-trunk-changes 2020-11-04

今日は Array のいくつかのメソッドの戻り値としてサブクラス化したものでも Array のインスタンスを返すようにする変更などがありました。

[c3e2dd072a] Yusuke Endoh 2020-11-03 14:32:40 UTC

67b2c21c327c96d80b8a0fe02a96d417e85293e8 で追加したテストのテストメソッドに使われてないローカル変数があったので警告抑制のため削除しています。

[700637570f] Kazuki Tsujimoto 2020-11-03 15:51:44 UTC

右代入の NEWS のエントリおよびなぜか残ってたテストメソッドを削除しています。 一行 pattern match が "=>" を使うようになったので。

[7d6c72dc06] git 2020-11-03 15:55:00 UTC

version.h の日付更新

[2a294d499b] Jeremy Evans 2020-11-03 22:01:38 UTC

Array#drop, #drop_while, #flatten, #slice, #sclice!, #take, #take_while, #uniq, #* などの Array のメソッドの戻り値を、receiver と同じクラスではなく Array のインスタンスを返すように変更しています。つまり Array を継承したサブクラスのインスタンスにこれらのメソッドを呼ぶと、これまでサブクラスのインスタンスがかえってきてたのが常に Array のインスタンスを返すようにしています。うーんなるほどー。チケットみると互換性問題になるから 3.0 になるタイミングで変更しちゃおうという意思はあったみたいだけど今まで入れるの忘れてたっぽいですね。 [ruby-core:42932] [Bug #6087]

[bf1047c757] Jeremy Evans 2020-11-03 22:06:11 UTC

2a294d499bf03211d02695f613f784a05943ea35 の Array のメソッドの戻り値のクラスの変更について NEWS にエントリを追加しています。

[8eca97c049] 卜部昌平 2020-11-02 06:26:32 UTC

Travis-CI の BASERUBY を 2.5 の ruby でビルドするテストを GitHub Actions に移植しています。ついでに 2.2 以降のバージョン全てを BASERUBY にするテストするようにしているようです。

[4c6700964d] 卜部昌平 2020-11-04 01:51:06 UTC

Travis-CI でのテストから clang の ASAN/MSAN/UBSAN などのチェック機能を有効にしたテストの実施を削っています。

[ae53fda013] 卜部昌平 2020-11-04 01:56:12 UTC

Travis-CI のビルドマトリクスから x86_64-linux でのテストを削っています。 GitHub Actions で実施されているからとのこと。

[f211f9cda4] Hiroshi SHIBATA 2020-11-04 04:30:27 UTC

doc/maintainers.rdoc の typeprof の項目に記載されているリポジトリの URL のスキーマhttps に修正しています。

[d42c68e912] Yusuke Endoh 2020-11-04 08:07:01 UTC

bundled gem の typeprof のバージョンを 0.2.0 -> 0.4.0 に更新しています。

[704fb0b815] Kazuhiro NISHIYAMA 2020-11-04 09:45:48 UTC

transient_heap.c のマクロ TRANSIENT_HEAP_USABLE_SIZE の定義にかっこをつけて演算の中で使った時に優先度の問題で誤った連結にならないようにする修正と、assert で比較しているところで明示的なキャストを追加して警告抑制しています。

ruby-trunk-changes 2020-11-03

今日は GC 時に自動的に GC.compact も実施するように設定する GC.auto_compact= メソッドの追加などがありました。

[79b242260b] Nobuyoshi Nakada 2020-11-02 13:48:28 UTC

parse.y で magic comment の frozen-string-literal に不正な値が指定されてた時の警告を rb_compile_warning() を直接読んでたのを rb_warning2() というマクロ経由で呼ぶようにしています。拡張ライブラリ ripper で parse した時に警告を正しく扱えるようにするたみみたいですね。

[67b2c21c32] Aaron Patterson 2020-11-02 22:40:29 UTC

GC.auto_compact= というメソッドを追加して GC 実行時に自動的に GC.compact によるオブジェクトの移動も行なわれるよう設定可能にしています。おお、ついに。変更内容をみると単にフラグを追加して処理追加してるだけではなくて GC の sweep 処理内に参照の更新対応などがマージされているので結構大きな変更になっています。おそらく安定するまでしばらくかかりそうですね。またついでに GC.stat の返す統計情報に :read_barrier_faults, :total_moved_objects といった項目を追加しています。 read_barrier_faults はなにかなと思ったら GC.compact の処理中にのみ SIGBUS や SIGSEGV のシグナルハンドラに read_barrier_signal() というハンドラが追加されてて、移動したオブジェクトの struct RVALUE の領域を mprotect(2) などで保護して不正なアクセスがあったら検出するようにしているようです。デバッグ用かな? [ruby-core:100025] [Feature #17176]

[46f3b68fbf] git 2020-11-02 22:43:29 UTC

version.h の日付更新

[4f7d27a210] Luciano Sousa 2020-11-03 00:26:31 UTC

67b2c21c327c96d80b8a0fe02a96d417e85293e8GC.auto_compact= 追加の NEWS の追記部分の typo 修正。コミットログに絵文字が入っているのがいまどきですね。

[fa7484019d] Kazuhiro NISHIYAMA 2020-11-03 01:25:52 UTC

NEWS.md にチケットの参照リンク用 footnote を追記しています。

ruby-trunk-changes 2020-11-02

今日は Ractor.send でオブジェクトの移動をする時の実装の変更などがありました。

[db7a3b63ba] Koichi Sasada 2020-11-01 00:56:40 UTC

ractor_move() という関数からオブジェクトの参照を再帰的に辿って Ractor 間のオブジェクトの移動のために参照をつけなおす処理を追加して Ractor.send(move: true) で移動できるオブジェクトの種類を増やしているようです。

[1581da9993] git 2020-11-01 16:37:56 UTC

version.h の日付更新

[5fefb53249] Koichi Sasada 2020-11-01 01:20:26 UTC

ractor_copy() という関数で Marshal.dump を使ったオブジェクトのコピーを行なっていたのを db7a3b63bae810a03b19b5577ded1403bb789185 で導入した rb_obj_traverse_replace() を利用してコピーするようにしています。

[539b89075a] Nobuyoshi Nakada 2020-11-02 09:24:45 UTC

parse.y の parser_get_bool() で strcasecmp(3) を直接使っていたところを STRCASECMP() マクロを利用するようにしています。 STRCASECMP() の実体は st.c で定義されている locale の影響を受けない独自バージョンの実装のようです。

ruby-trunk-changes 2020-11-01

今日は pattern match の experimental warning を停止する変更などがありました。

[b601532411] Kazuki Tsujimoto 2020-11-01 04:28:24 UTC

pattern match はまだ experimental warning が出てましたがついに警告が出ないようにしています。ただし最近追加された find pattern と最近記法が変更になった一行 pattern match の構文はまだ experimental warning が出るようにしています。

[b1e7c3a31f] git 2020-11-01 04:36:02 UTC

version.h の日付更新

[0e33028d69] Koichi Sasada 2020-11-01 04:55:54 UTC

rubyspec で experimental warning を出すテストとして pattern match が使われていたところを b60153241121297c94de976419d421683da4d51b の追随で一行 pattern match 記法を使うように変更しています。

[305c79af2f] Rei Odaira 2020-11-01 05:12:01 UTC

拡張ライブラリ socket の AIX でのビルドのため Solaris で ext/socket/rubysocket.h の T_DATA というマクロを undef しているのを AIX でも有効にしています。システムヘッダに同じ名前のマクロが定義されているようです。

[e03e1982bd] Kazuki Tsujimoto 2020-11-01 07:19:07 UTC

pattern match の構文の struct NODE の 3つの子 node へのポインタの利用のしかたを変更しています。pconst を最初のノードに揃えるように u1 <-> u2 の入れ替えをしています。

[e0e2492cd3] Kazuki Tsujimoto 2020-11-01 08:24:36 UTC

0e33028d69a25c512df1a44f930652c9a5c5b153 の rubyspec の追随で一行 pattern match がない(または文法が違う) 2.7以前を考慮してバージョンによる guard を追加しています。

[7282f3113d] Kazuki Tsujimoto 2020-11-01 09:19:05 UTC

rubyspec の 1行 pattern match のテストで警告を抑制するため一時的に $VERBOSE を nil に設定するようにしています。

[963359a762] Kazuki Tsujimoto 2020-11-01 09:58:52 UTC

7282f3113ddb117f5d4ea13a60c223a3911ea224 はやっぱり suppress_warning というヘルパーメソッドを利用するようにしています。

ruby-trunk-changes 2020-10-31

今日は主に Ractor のブロックの評価値のコピー抑制や Ractor#close の戻り値の変更など Ractor まわりの変更がありました。

[66bf743b93] Hiroshi SHIBATA 2020-10-30 12:45:23 UTC

標準添付ライブラリ debug を default gem にしています。

[fd08927699] Koichi Sasada 2020-10-30 15:40:04 UTC

Ractor のブロックの最終的な評価値を Ractor#take で取得する時にはその Ractor は既に終了しているためコピーする必要がないので、不要なコピーを抑制するようにしているようです。

[7c548278f0] git 2020-10-30 16:48:24 UTC

version.h の日付更新

[bd6cd85155] Marc-Andre Lafortune 2020-10-24 04:01:17 UTC

Ractor#close の戻り値に Ractor 自身を返すようにしています。また rdoc 用コメントを追加しています。

[520b86caf1] Alan Wu 2020-10-30 23:34:41 UTC

string.c の rb_strseq_index() でローカル変数を if のブロック内のスコープで宣言するように移動するリファクタリング

[670e288d65] Alan Wu 2020-10-24 18:33:46 UTC

rb_str_new_static()、rb_usascii_str_new_static()、rb_utf8_str_new_static() などの関数のヘッダでの prototype 宣言で仮引数名を明示するスタイルにしています。またコメントを追加してこれらの関数が C の文字列として NUL 文字の終端ぶんのメモリ領域を含んでいることを期待していることを追記しています。

[5dc107b03f] wanabe 2020-08-06 22:51:19 UTC

VM 命令列の peephole 最適化の結果未到達になった命令を削除する処理を iseq_optimize_after_set_sequence() という関数に切り出して最後にまとめてやるようにしています。

[3685ed7303] wanabe 2020-08-06 22:59:50 UTC

compile.c の iseq_set_sequence() で ISEQ_ELEMENT_ADJUST で sp の調整は常に行うようにしています。

[dd2f99d94a] Nobuyoshi Nakada 2020-10-31 01:51:57 UTC

5dc107b03f5cf32656a5308574b90458486c633c で導入した iseq_optimize_after_set_sequence() で未使用のローカル変数があったのを削っています。

[ea8fc7fdd3] Nobuyoshi Nakada 2020-10-31 02:05:42 UTC

doc/standard_library.rdoc で標準添付ライブラリ English が English.rb と拡張子つきで表記されてたので削っています。

[4f8d9b0db8] wanabe 2020-10-31 02:53:20 UTC

3685ed7303fc08bf68cd3cc8d11e22a8ce63a0675dc107b03f5cf32656a5308574b90458486c633cVM 命令列のpeephole 最適化後の不要コード削除のリファクタリングを revert しています。 CI でエラーがあったとのこと。