ruby-trunk-changes 2020-12-22

今日は拡張ライブラリ json, date の Ractor safe 化や TracePoint を Ractor local にする変更、Ractor local storage を使うメソッドや Ractor.main メソッドの新規追加など Ractor がらみの変更が多くありました。

[98cc15ed1e] Kenta Murata 2020-12-20 03:17:32 UTC

拡張ライブラリ json でネストのチェックのため? に使われる JSON::SAFE_STATE_PROTOTYPE という定数に格納される JSON::State のオブジェクトを dup でコピーして使ってたのですが、特にそうする理由もなさそうなので単に JSON::State のオブジェクトを新規作成して使うようにしてこの定数は削除しています。おそらく Ractor safe にするためグローバルな参照されるオブジェクトがあると面倒だったからでしょう。

[596da98b3f] Kenta Murata 2020-12-21 06:45:50 UTC

JSON Module の create_id という attr を Thread local storage を使って管理するように実装を変更しています。 attr_accessor :create_id も消していいのではないかな、と思ったら後で消されてました。

[4c2e7f26bd] Kenta Murata 2020-12-21 06:50:04 UTC

拡張ライブラリ jsonBigDecimal のクラスを取り出して static 変数に格納して最適化してたのをやめて、メソッド呼び出しを利用するようにしています。こんなことしてたのか。これもおそらく Ractor safe 化のためですね。

[14d7d1df25] Kenta Murata 2020-12-21 06:57:42 UTC

拡張ライブラリ json にも rb_ext_ractor_safe() の呼び出しを追加して Ractor safe に宣言するようにしています。

[8c0c61728f] Kenta Murata 2020-12-21 13:16:02 UTC

NEWS の拡張ライブラリ json の変更点に Ractor compatible 化について追記しています。

[dca6752fec] Koichi Sasada 2020-12-21 09:06:28 UTC

Ractor::IsolationError という例外クラスを追加して main Ractor 以外で shareable でないオブジェクトを参照しようとした時に RuntimeError や NameError のかわりにこの例外を発生させるようにしています。

[0b6a80c0be] Kenta Murata 2020-12-21 13:40:38 UTC

596da98b3ff28ff48b10aed0bbe75287862eacbb の続きで JSON の attr_accessor create_id を削除しています。

[91e2f08a6a] Koichi Sasada 2020-12-21 14:28:05 UTC

rb_eRactorUnsafeError と rb_eRactorIsolationError の宣言に使う extern を RUBY_EXTERN に変更しています。 MJIT 用ヘッダのため。

[84eebb3c9e] Naohisa Goto 2020-12-21 14:08:35 UTC

configure で Solaris で -D_XOPEN_SOURCE フラグを追加する場合に C++ コンパイラにはこれを渡してはいけないそうで CXXFLAGS に -U_XOPEN_SOURCE オプションを追加して打ち消すように(?) しています。

[c7a5cc2c30] Nobuyoshi Nakada 2020-12-21 12:46:10 UTC

String#tr の実装で ASCII 文字の範囲の最適化のためのテーブルのサイズをハードコードしてたのを TR_TABLE_MAX というマクロで定義するようにリファクタリング

[a2950369bd] Koichi Sasada 2020-12-18 21:38:58 UTC

ブロックは基本的に Ractor 間をまたげないので TracePoint を Ractor 単位でイベント発火させるようにしています。つまり TracePoint を設定してから Ractor.new しても新しい Ractor でのイベントは発火しないってことですね。

[02d9524cda] Koichi Sasada 2020-12-19 16:44:41 UTC

構造体 rb_ractor_t から self, id と a2950369bd8a5866092f6badf59b0811653a6092 で追加した hooks メンバーを struct rb_ractor_pub という構造体に分離して埋め込むリファクタリング。 rb_ec_ractor_hooks() を inline 化して MJIT 対応するという目的もあったようです。

[208f7d7c80] git 2020-12-21 15:03:21 UTC

version.h の日付更新

[5c0abe2d94] Kazuki Tsujimoto 2020-12-21 17:08:32 UTC

doc/syntax/pattern_matching.rdoc のマークアップの追加や Hash パターンでの {} の特別扱いについての追記など。

[c30f03d328] 卜部昌平 2020-07-27 07:15:28 UTC

Data クラスが r60930 684bdf6171b76f5bc5e4f05926a5ab01ec2b4fd5 で deprecated にされてしばらくたつので 3.0 ではもう削除することにしたようです。ただし C API としての変数 rb_cData は deprecated にされてなかったということで、改めて警告を出すようにしたうえで rb_cObject を参照するようにしています。

[8918a9cf6c] Nobuyoshi Nakada 2020-12-21 16:00:43 UTC

やっぱり rb_cData 変数も削除することにしたようで、拡張ライブラリなど利用してたところは rb_cObject で代替するようにしています。

[8f2031a067] Marc-Andre Lafortune 2020-12-21 18:30:40 UTC

Ractor#to_s と #inspect の alias として定義を追加しています。

[35471a9487] Koichi Sasada 2020-12-21 16:55:15 UTC

Ractor#[] や Ractor#[]= で Ractor local storage を使えるようにメソッド追加しています。

[d0e4ccbefc] Koichi Sasada 2020-12-21 17:22:51 UTC

Ractor.main というメソッドを追加して、main Ractor のオブジェクトを返すようにしています。 [ruby-core:101594] [Feature #17418]

[520dcbd600] Koichi Sasada 2020-12-21 20:27:47 UTC

cee02d754d76563635c1db90d2ab6c01f8492470 のメソッドキャッシュクリアし忘れの修正で、今度はメソッド探索で無限ループ? に陥る可能性があったようで、キャッシュクリアを rb_id_table_foreach() で mtbl をループして move_refined_method() を呼び出す前に行うようにしています。 [ruby-core:101588] [Bug #17417]

[c34c6a89cb] Koichi Sasada 2020-12-21 16:05:52 UTC

Ractor の rdoc 用コメントのサンプルや記述を修正しています。

[a29b9e5efe] Nobuyoshi Nakada 2020-12-21 22:52:06 UTC

rubyspec の rb_eFrozenError の定数を参照するかどうかの判定で RUBY_VERSION_IS_2_4 と RUBY_VERSION_IS_2_5 というマクロが使われていましたが、もう不要になった(2.4 以前を使わなくなった?)ので削除しています。

[831f785068] nagachika 2020-12-21 23:08:27 UTC

Ractor.make_shareable の rdoc 用コメントの typo 修正。

[91773ddd26] Marc-Andre Lafortune 2020-12-21 23:56:46 UTC

ractor_local_value() にデバッグ用の rp() の呼び出しが残ってたのを削除しています。

[4a18cc7f60] Yusuke Endoh 2020-12-22 00:04:54 UTC

NEWS に Binding#eval での __FILE__ の変更について追記しています。 [ruby-core:101595] [Bug #17419]

[4728c0d900] zverok 2020-12-16 22:49:52 UTC

Symbol#name の rdoc のためのダミーの関数定義(#if 0 ... #endif でコメントアウトされている)を string.c に追加しています。また Symbol#to_s に戻り値は freeze されてない(一方 Symbol#name は freeze された String を返す)ことを追記しています。

[861dbd9506] zverok 2020-12-20 20:06:26 UTC

Random の rdoc のためにダミーの rb_define_method() の呼び出しを追加しています。

[816bbfdc87] zverok 2020-12-21 21:15:47 UTC

Proc#== メソッドの rdoc 用コメントを追加しています。

[843fd1e8cf] zverok 2020-12-21 21:42:01 UTC

新規追加されたメソッド Fiber#backtrace と Fiber#backtrace_locations の rdoc 用コメントを追加しています。

[d0050edb84] Marc-Andre Lafortune 2020-12-22 02:07:13 UTC

843fd1e8cfccdf1efcbb157315e267e4f380e030 で追加の Fiber#backtrace の rdoc 用コメントで Fiber 終了後に呼ばれた時の挙動についての説明を修正しています。 [ruby-core:101530] [Bug #17408]

[63b872c409] Akinori MUSHA 2020-12-22 03:17:47 UTC

tool/sync_default_gems.rb に default gem の set の upstream からの同期の対応を追加しています。

[3fa4bd8292] Akinori MUSHA 2020-12-22 03:20:21 UTC

標準添付ライブラリ set に upstream から 1.0.0 をマージしています。

[be9b5553a3] Akinori MUSHA 2020-12-22 03:26:45 UTC

NEWS に標準添付ライブラリ set の更新や変更について追記しています。

[2e1cdf36ba] Koichi Sasada 2020-12-22 03:46:15 UTC

NEWS に Ractor 関連の C API 追加について 1行追加しています。

[7204b81bcb] Koichi Sasada 2020-12-22 03:59:47 UTC

thread_create_core() のデバッグ出力用の RUBY_DEBUG_LOG() の引数で 02d9524cdaca1754718bf1d591408d377e6b383a の構造体レイアウト変更に追随できてなかったところが残ってたので直接メンバー参照せずマクロ利用するように修正しています。

[fa356a798a] 卜部昌平 2020-08-13 02:44:15 UTC

Enumerator.new に引数としてオブジェクトとメソッド名を渡してブロックを渡さない呼び出しかたは deprecated になっていたので 3.0 でサポートするのをやめて ArgumentError が発生するようにしています。 [ruby-dev:50945] [Feature #17116]

[fee2913d0a] 卜部昌平 2020-07-28 02:03:00 UTC

Struct::Tms という定数が Process::Tms にとってかわられてから互換性のため deprecated な定数として残されてましたが、3.0 で削除しています。

[03f2b09320] Yusuke Endoh 2020-12-22 05:05:36 UTC

NEWS に Binding#eval の変更についての記述にセクションヘッダが漏れてたので追加しています。

[692af8e8f8] Takashi Kokubun 2020-12-22 05:16:19 UTC

vm_exec() の第2引数を int から bool に変更し、また TRUE/FALSE といった定数を利用していたところは true/false を利用するようにしています。

[95acd3c030] Yuki Nishijima 2020-12-22 05:42:32 UTC

標準添付ライブラリ did_you_mean のバージョン DidYouMean::VERSION を "1.5.0" に更新しています。

[15b81edd86] Takashi Kokubun 2020-12-22 06:05:58 UTC

mjit_enabled という変数は MJIT 用ヘッダでは当然 true のはずなので変数定義をマクロに変更して常に true に展開するようにしています。変数参照するよりちょっと速くなるという最適化の意味もあるようです。

[7898bc9225] 卜部昌平 2020-12-22 06:25:03 UTC

include/ruby/internal/globals.h から既に存在しなくなってた rb_cCont の宣言を削除しています。

[7fbad92241] 卜部昌平 2020-12-22 07:15:35 UTC

object.c にまだ rb_cData の変数宣言が残ってたので削除しています。

[ee102de6d7] Marc-Andre Lafortune 2020-12-20 03:28:20 UTC

拡張ライブラリ date で内部的に保持する Array や Regexp を freeze しておくようにしています。

[f2f00e24fa] Marc-Andre Lafortune 2020-12-20 03:29:16 UTC

拡張ライブラリ date の Init_date_core() に RB_EXT_RACTOR_SAFE() 呼び出しを追加して(マクロのほうを使うのか) Ractor safe にし、さらに Date のインスタンスをデフォルトで Ractor shareable にするようにしています。

[edb76e8765] Hiroshi SHIBATA 2020-12-22 09:18:32 UTC

拡張ライブラリ json のバージョンを 2.5.0 に更新して JRuby 対応のため定数 JSON::SAFE_STATE_PROTOTYPE を復活させたり Ractor を使うテストを Ractor が使える時だけ実行するようにしたりという対応を追加しています。

[93a56a5e98] Samuel Williams 2020-12-21 21:55:29 UTC

doc/scheduler.md を doc/fiber.md とファイル名を変更して冒頭に通常の(blocking じゃない) Fiber の明示的に切り替える使いかたについての記述を追加しています。