今日は拡張ライブラリ 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
拡張ライブラリ json で BigDecimal のクラスを取り出して 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 修正。
[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 の明示的に切り替える使いかたについての記述を追加しています。