ruby-trunk-changes 2020-10-20

今日は bundled gems に typeprof の追加の他、一部の特殊変数のスコープを Ractor 単位にするなど Ractor 関係の変更が主にありました。

[319afed20f] Koichi Sasada 2020-10-19 07:47:32 UTC

pthread の thread local storage を使うよりも __thread や _Thread_local といった修飾子でコンパイラに変数を thread local storage 扱いさせるほうが高速らしくこれを使うようにしています。ただ Darwin ではこの方法の TLS は共有ライブラリをまたいで共有できない? らしいので rb_execution_context_t の設定に独自に変数にして関数で設定/参照するようにしています。 https://github.com/ruby/ruby/pull/3665

[dac3677469] git 2020-10-19 16:05:27 UTC

version.h の日付更新

[a76a30724d] Koichi Sasada 2020-10-19 16:34:17 UTC

de17e2dea137bc5ba9f00e3acec32792d0dbb2eb の Encoding の管理テーブルを固定長の配列と可変長の部分に分けて Ractor 間の排他のためのロックを減らすようにしたのを revert しています。固定長部分の更新と参照で race condition がありえるのでダメだったみたいです。

[4a7dccf44f] Takashi Kokubun 2020-10-20 03:56:08 UTC

拡張ライブラリ ripper の Ripper.lex のテストに最後の閉じブレースに on_embexpr_end というフックが反応するという挙動を追加しています。テストで Ripper.lex に渡されてる文字列は SyntaxError だと思いますが、DSL の実装をするうえでこの挙動が便利なので保存するためにテストを追加するということみたいです。

[c05e41035c] Yusuke Endoh 2020-10-09 01:16:59 UTC

bundled gems に typeprof を追加しています。また make test-bundled-gems の前準備として rbs.gem もインストールする対象に追加しています。

[9ced5fae6d] Koichi Sasada 2020-10-20 06:36:51 UTC

NEWS に Fiber#transfer の制限緩和について追記しています。 [Bug #17221]

[99310e3eb5] Koichi Sasada 2020-10-20 01:46:43 UTC

グローバル変数のような見た目の特殊変数たちを Ractor の導入に伴なって Process 単位/Ractor 単位/Thread 単位と locality の階層が増えたので $DEBUG, $-d, $VERBOSE, $stdin などを Ractor 単位の特殊変数として定義しています。このために rb_gvar_ractor_local() という関数が導入されています。 [ruby-core:100439] [Bug #17268]

[2bdbdc1580] Koichi Sasada 2020-10-20 02:21:49 UTC

Ractor.shareable? というメソッドを追加して、引数のオブジェクトが Ractor 間で共有可能なオブジェクトかどうか判定できるようにしています。

[ade411465d] Koichi Sasada 2020-10-20 02:24:37 UTC

拡張ライブラリ objspace の ObjectSpace.each_object は Object Space 内の(つまり VM 内のメモリ管理されてる全) オブジェクトを iterate しますが、Ractor 間で共有不可なオブジェクトは別の Ractor から見えてはまずいので、sharable なオブジェクトだけ yield するようにしています。ううむ、なるほど。 [ruby-core:100441] [Feature #17270]

[18cecda46e] Kenta Murata 2020-10-20 07:00:35 UTC

Array#[] の引数に Range オブジェクトを渡してそれが配列の範囲外だった時の例外メッセージにその Range を表示していたのですが、endless Range を渡した時に終端に -1 を補って表示してしまっていたので、Range オブジェクト自体を PRIsVALUE で to_s の結果を埋め込むようにしています。 [ruby-core:100442] [Bug #17271]

[67c25a34a7] Koichi Sasada 2020-10-20 08:57:20 UTC

99310e3eb56fbc85bb45119285812eb959448d0c で追加した Ractor 単位の特殊変数についてのテストで echo コマンドを利用していたのが Solaris では ENV を参照してしまってエラーになるそうなのでスキップするようにしています。