ruby-trunk-changes 2020-12-20

今日は拡張ライブラリ bigdecimal の修正や機能追加と Ractor safe 化のほかいくつかの拡張ライブラリの Ractor safe 化、irb の measure コマンドの追加など多くの変更がありました。

[4735a5b9d2] Yusuke Endoh 2020-12-19 12:19:16 UTC

0e79d4cde547edd52b2d5bf576780906e45a742d で追加(復活)した Module#attr_xxx のテストのメソッド再定義の警告を抑制するため使う attr 名の重複を解消しています。

[e1424c3501] Kenta Murata 2020-12-18 14:46:26 UTC

拡張ライブラリ bigdecimalBigDecimal#to_d のデフォルトの precision を Float::DIG にしていたのを +1 しています。 Float との計算で期待した結果にならないことがあるという不具合があった模様。 [ruby-core:80234] [Bug #13331]

[97d4e72e0b] Kenta Murata 2020-12-18 16:30:37 UTC

e1424c35012ccf1f3822c9046081b225aef4142e の続きで DBL_DIG+1 を定義してたマクロ DBLE_FIG を利用するようにリファクタリングしたうえで DBLE_FIG の定義を rmpd_double_figures() という inline 関数(内容は同じ)に置換するように変更しています。

[928a06723d] Kenta Murata 2020-12-18 17:45:47 UTC

拡張ライブラリ bigdecimalBigDecimalインスタンス生成時の flags に RUBY_TYPED_FROZEN_SHAREABLE をセットするようにして、Init_bigdecimal() に rb_ext_ractor_safe() の呼び出しを追加して Ractor safe にしています。

[ff9e40811c] Kenta Murata 2020-12-18 19:24:15 UTC

拡張ライブラリ bigdecimalBigDecimal#precision メソッドを追加しています。これまでなかったのかーと思ったけど precision って明示的に保持してるものではないんですね。

[654f6fbf19] Kenta Murata 2020-12-19 02:55:46 UTC

拡張ライブラリ bigdecimalBigDecimal#precs メソッドを deprecated にして警告を出力するようにしています。depcated カテゴリなのでデフォルトだと表示されないけど。

[df3deb3baa] Kenta Murata 2020-12-19 08:06:14 UTC

拡張ライブラリ bigdecimalBigDecimal#n_significant_digits メソッドを追加。有効数字の桁数? を返しているようです。

[8986f948e0] Kenta Murata 2020-12-19 10:21:56 UTC

拡張ライブラリ bigdecimal のバージョンを 3.0.0 に更新しています。

[8355a3e17b] Kenta Murata 2020-12-19 12:13:33 UTC

654f6fbf19c0ca2e01765a909b4d952b7f0f5baaBigDecimal#precs を deprecated にした時に追加したテストで警告メッセージのチェックのため一時的に Warning[:deprecated] = true にセットするようにしています。

[d62414b48f] Kenta Murata 2020-12-19 13:15:48 UTC

NEWS の拡張ライブラリ bigdecimal のバージョン更新についての記述を更新しています。

[de80b92891] Kenta Murata 2020-12-19 15:40:47 UTC

拡張ライブラリ pathname でも Init_pathname() に rb_ext_ractor_safe() の呼び出しを追加して Ractor safe にしています。 https://github.com/ruby/ruby/pull/3940

[48bd5a3d57] git 2020-12-19 15:41:06 UTC

version.h の日付更新

[50f1e7eb23] Kenta Murata 2020-12-19 15:42:04 UTC

NEWS に拡張ライブラリ pathname の更新について追記しています。

[d44671c819] Nobuyoshi Nakada 2020-11-28 09:39:57 UTC

14453a256d58b11b06d432e2a4388d95aac298d6 で win32/win32.c の getenv() マクロ定義を削除してたのを復活させています。dln_find.c を #include してるのでそこの getenv() をすりかえるために必要だったとのこと。あれ 3db21cf25f9c0830fafd9f72f228826515a5b566 でも同様に復活させてた気がするけど……と思ったら ca76337a00244635faa331afd04f4b75161ce6fbUTF-8 化でまた削除されてたみたいです。

[1f565ac6d9] Victor Shepelev 2020-12-19 18:04:40 UTC

Ractor のメソッドと内部的クラスについての rdoc 用コメントを追加しています。 https://github.com/ruby/ruby/pull/3895

[a273171ca8] Marc-Andre Lafortune 2020-12-19 18:08:24 UTC

Ractor::ClosedError クラスについての rdoc 用コメントの記述をちょっと修正。

[b2acae3274] Nobuyoshi Nakada 2020-12-19 17:56:18 UTC

parse.y の range_op() と parser_append_options() で NEW_GVAR() と NEW_GASGN() マクロの引数で rb_intern() していたのがマクロ展開後に 2回 rb_intern() を呼び出すようになってしまってたので、事前に呼び出した結果の ID を渡すようにリファクタリングしています。

[c01ad11f90] Nobuyoshi Nakada 2020-12-19 18:13:33 UTC

ff9e40811c67b1090966b655f7adc0684fc58abe で追加した拡張ライブラリ bigdecimalBigDecimal#precision の実装関数で未初期化変数の警告を抑制するため明示的な初期化を追加しています。

[ed4381d941] Nobuyoshi Nakada 2020-12-19 18:14:58 UTC

rubyspec の BigDecimal#precs のテストで deprecated カテゴリの警告が出るようになったのに対応してとりあえず 3.0 ではテストしないようにしています。

[3621380046] Yusuke Endoh 2020-12-19 19:14:05 UTC

NEWS の Hash#each がブロックに渡す引数の仕様変更について特に experimental なのでリリース前に revert されるかもしれないと記述されてたのを削除しています。

[c1461c927b] Koichi Sasada 2020-12-19 19:09:40 UTC

拡張ライブラリ cgi/escape の Init_escape() に rb_ext_ractor_safe() の呼び出しを追加して Ractor safe に宣言しています。

[846c4b03b8] Koichi Sasada 2020-12-19 19:21:54 UTC

拡張ライブラリ monitor の Init_monitor() にも rb_ext_ractor_safe() を追加して Ractor safe にしています。

[bcf4b236e4] Koichi Sasada 2020-12-19 19:22:13 UTC

拡張ライブラリ racc/cparse の Init_cparse() にも rb_ext_ractor_safe() を追加して Ractor safe にしています。

[7f8108eeff] Koichi Sasada 2020-12-19 19:51:00 UTC

ractor.rb のインデント修正のみ。

[70f20234b2] Marc-Andre Lafortune 2020-12-19 17:54:07 UTC

tool/lib/test/unit/core_assertions.rb に assert_ractor という assertion メソッドを追加して子プロセスで複数 Ractor 起動した状態で指定のスクリプト片を実行するようにしています。Ractor が存在しなければ実行しないようにする対処も含まれています。 [ruby-core:101247] [Feature #17367]

[67e062b523] Marc-Andre Lafortune 2020-12-19 17:17:47 UTC

70f20234b297a7fc9940bace30101813aa9df052 で追加された assert_ractor を利用して標準添付ライブラリ matrix の Ractor を利用したテストを復活させています。

[6343a81129] Marc-Andre Lafortune 2020-12-19 17:19:06 UTC

同じく 70f20234b297a7fc9940bace30101813aa9df052 で追加された assert_ractor を利用して拡張ライブラリ ostruct のテストで Ractor を使ったものも復活させています。

[648bbfcc65] Soutaro Matsumoto 2020-12-20 01:25:27 UTC

bundled gems の rbs のバージョンを 1.0.0.pre に変更しています。 https://github.com/ruby/ruby/pull/3941

[f70b894b88] Koichi Sasada 2020-12-19 18:23:41 UTC

struct RClass の定数テーブルは VM 全体で共有されるため、これにアクセスするコード部分は RB_VM_LOCK_ENTER()/RB_VM_LOCK_LEAVE() で排他処理して複数 Ractor での競合を避けるようにしています。

[b1b6dbfdc3] Marc-Andre Lafortune 2020-12-20 03:37:27 UTC

70f20234b297a7fc9940bace30101813aa9df052 で追加した assert_ractor で keyword rest 引数のまま扱ってた require を明示的なキーワード引数にしています。

[4902f96ee5] Kazuki Tsujimoto 2020-12-20 04:22:53 UTC

doc/syntax/pattern_matching.rdoc のパターンマッチについてのドキュメントの find パターンについての追記や 1行記法での in の復活への追随やマークアップ修正など。

[d37be18af5] Kazuki Tsujimoto 2020-12-20 04:25:43 UTC

4902f96ee56d0391165b9ba769224c0d88d105fe で追記した pattern match の文法の BNF 記法の typo 修正。

[85ec6cc387] Kazuki Tsujimoto 2020-12-20 04:28:40 UTC

doc/syntax/pattern_matching.rdoc のマークアップの追加。

[02b3555874] Takashi Kokubun 2020-12-20 05:02:18 UTC

.github/workflows/mjit.yml で core ファイルのダンプのために gdb のインストールするステップを追加しています。

[ae1cc3fd4e] Nobuyoshi Nakada 2020-12-20 05:28:55 UTC

io.c の rb_thread_scheduler_wait_for_single_fd() の定義に static を追加しています。rb_thread_call_with_gvl() に渡すコールバック関数としての用途のみなので外部から呼べる必要はないので。

[7d0144e055] Takashi Kokubun 2020-12-20 05:35:59 UTC

MJIT で JIT 用に実行時に生成する C のコードで割り込みの処理時に mjit_call_p というグローバル変数が偽だったら JIT コードの利用をやめるチェックを追加しています。そのかわり(?) tool/ruby_vm/views/_mjit_compile_insn.erb のほうで leaf_without_check_ints が真の命令では mjit_call_p のチェックを省略するようにしているようです。うーむ難解。

[b911509a08] Nobuyoshi Nakada 2020-12-20 06:13:07 UTC

ractor.rb の閉じかっこのインデントがずれてたのを修正しています。

[67ee1cbdd5] Kazuki Tsujimoto 2020-12-20 07:00:13 UTC

lib/.document および ext/.document から存在しなくなったファイルや余分なファイルを含む指定をより細かい指定に置きかえるようにしています。

[8b6aaeaddf] aycabta 2020-12-20 03:20:00 UTC

標準添付ライブラリ irbIRB::RubyLex#set_input で最後の改行がなかった時に残った token を解析してインデント数などを得てプロンプト表示に使うようにしています。プロンプト生成を最適化したからペーストとかで複数行を一度に貼りつけた時に正しく処理されない場合があったとかかな。

[9f08e3c703] aycabta 2020-08-14 21:36:24 UTC

標準添付ライブラリ irb の組み込みのコマンドに measure というのを追加して入力したスクリプト片の実行にかかった時間を表示するモードにできるようにしています。前後で Time.now するとかよくやるので便利そう。なお Time.now で所要時間を測るモード以外にも stackprof を使ってプロファイルを取るモードもある模様。別途 gem のインストールされている必要はありそう。

[a7cacd33cc] aycabta 2020-12-20 07:15:58 UTC

標準添付ライブラリ reline のバージョンを 0.1.10 に更新しています。

[24fcbc92b4] aycabta 2020-12-20 07:16:11 UTC

標準添付ライブラリ irb のバージョンを 1.2.8 に更新しています。

[216a087e93] aycabta 2020-12-20 07:48:47 UTC

9f08e3c703795e81d333d568e7e44743022468f1 で追加した irb の measure コマンドのテストのエラー修正。

[59b84fbf2e] aycabta 2020-12-20 08:07:24 UTC

同じく 9f08e3c703795e81d333d568e7e44743022468f1 で追加した irb の measure コマンドのテストでプロンプト設定を変更しています。よくわかりませんが CI を通すためらしい。

[0fad9a9e30] Nobuyoshi Nakada 2020-12-20 08:10:11 UTC

さらに 9f08e3c703795e81d333d568e7e44743022468f1 で追加した irb の measure コマンドのテストで IRB.conf[:VERBOSE] を false にセットしておくようにしています。

[feea436feb] Nobuyoshi Nakada 2020-12-20 09:25:39 UTC

irb の組み込みコマンドの実装でコンテキストとなっているオブジェクトの class のクラス変数を利用していたのを、特異クラス(singleton_class)のクラス変数を利用するように変更しています。クラスは他のインスタンスとも共有しているのでグローバルな影響があるので。

[5b98b2ce39] Nobuyoshi Nakada 2020-12-19 17:16:31 UTC

Windows 環境でファイル名など filesystem encoding に UTF-8 を使うようにする変更の続き。 [ruby-core:76693] [Feature #12654]

[95862ae440] Nobuyoshi Nakada 2020-12-20 06:29:21 UTC

5b98b2ce39ed979aec614365a2dc3e1c30052bca のさらに続きで Windows 環境で readdir() にも UTF-8 を使うバージョンの API の wrapper 関数 rb_w32_ureaddir() を導入して readdir() をこれに置換するようにしています。 [ruby-core:76693] [Feature #12654]

[37987d9994] Nobuyoshi Nakada 2020-12-19 17:20:27 UTC

5b98b2ce39ed979aec614365a2dc3e1c30052bca95862ae44046cfc66c474ce534c204d276ea704d の続きでファイル操作系の API の wrapper で rb_w32_xxx() のほう(UTF-8 版じゃないほう)を deprecated に宣言して、実装を共有するようにリファクタリングしています。

[4b6e3f7b82] Nobuyoshi Nakada 2020-12-20 10:35:59 UTC

feea436febb50eb4265bd985a550e384c606122c で標準添付ライブラリ irb のビルトインコマンド定義に singleton_class を使うように変更したところの続きで、コマンドを明示的に特異メソッドとして定義するようにしています。

[8680ae9cbd] Nobuyoshi Nakada 2020-12-20 10:36:24 UTC

9f08e3c703795e81d333d568e7e44743022468f1irb の measure コマンド実装で未使用の変数が残ってたのを削除しています。