ruby-trunk-changes 2022-12-02

今日は Module#remove_method の不具合修正、Data のインスタンスを freeze しておく変更、reline の修正、YJIT の case 文の最適化などがありました。

[01790de9e6] Nobuyoshi Nakada 2022-12-01 14:01:28 UTC

NEWS のマークアップの修正のためインデントを修正。

[06a0c58016] Jemma Issroff 2022-12-01 15:53:50 UTC

YJIT の ARM 版の実装でのレジスタへ 32 bit または 16 bit だけのロードをする命令の生成で不具合があったみたいで修正しているようです。 https://github.com/ruby/ruby/pull/6840

[a14a1a5626] Nobuyoshi Nakada 2022-12-01 08:26:45 UTC

Data クラスのインスタンスの初期化時に freeze するようにしています。 [ruby-dev:52007] [Feature #19163]

[5872fd6f6c] Nobuyoshi Nakada 2022-12-01 13:50:25 UTC

Marshal.load から読み込んだ Data のインスタンスも freeze するようにしています。といっても Marshal.load の実装の変更ではなくて Struct と共有している rb_struct_initialize() でクラスが Data の時だけ freeze するという処理を追加しています。 [ruby-dev:52007] [Feature #19163]

[2c939458ca] Takashi Kokubun 2022-12-01 15:59:56 UTC

YJIT の opt_case_dispatch 命令の実装のための分岐の命令の順序を実際に渡されている値を参考にして変更したコード生成するという最適化。たいてい同じ when に入るからそれを先頭にしておいたほうがいいってことだと思います。 https://github.com/ruby/ruby/pull/6841

Qnil または Qundef をチェックしているところで NIL_OR_UNDEF_P() マクロを利用するようにリファクタリング

ARGF の実装の関数の共通の前処理の Encoding のチェックなどを argf_encoding() という関数に切り出すリファクタリング

rb_is_usascii_enc()、rb_is_ascii8bit_enc()、rb_is_locale_enc といった Encoding のチェックマクロを追加しています。

1a64d45c67feed7355d6b53746801acb319394a4 で追加した関数マクロ群にかっこが足りてなかったので追加しています。

[c0dc717c45] Nobuyoshi Nakada 2022-10-28 10:28:17 UTC

Kernel#Complex() で文字列から Complex に変換する時に桁区切りの "_" が連続しているのは ArgumentError を発生させるようにしています。 [ruby-core:110523] [Bug #19087]

[c94cd8534a] Nobuyoshi Nakada 2022-12-01 16:47:30 UTC

rubyspec の String#to_c のテストに "_" を連続している文字列が使われていたので c0dc717c45fc3abc64a337c3481bc4555b675d87 でエラーになってしまうので 3.2 以降では実行しないように修正しています。 [ruby-core:110523] [Bug #19087]

[9da2a5204f] Nobuyoshi Nakada 2022-12-01 16:50:48 UTC

c94cd8534afad86c75f2c7b4f4a2ab4ea2dc4837 で修正した rubyspec のテストを別の spec の中にネストさせています。これなんでだろう。 [ruby-core:110523] [Bug #19087]

[3d272b0fc8] Jean byroot Boussier 2022-12-01 22:32:41 UTC

Module#remove_method で freeze したインスタンスを持つ Class/Module からメソッド削除しようとしたり Module#prepend で freeze した Module を prepend した Class/Module からメソッド削除しようとすると誤って FrozenError が発生してしまうという不具合を修正しています。RCLASS_ORIGIN() で Module#prepend されているクラスに辿る前に freeze チェックをするようにしています。後者の現象はわかるんですがこれでインスタンスの freeze の影響を受けるのは不思議ですね。 [ruby-core:111116] [Bug #19164] [ruby-core:111131] [Bug #19166]

[171e94bd95] Burdette Lamar 2022-12-01 23:17:31 UTC

標準添付ライブラリ net/http の Net::HTTPHeader の rdoc 用コメントの手直し。

[da204d2eee] John Hawthorn 2022-11-22 22:28:22 UTC

Class の作成時に rb_classext_t::max_iv_count の値を親クラスから継承するようにしています。

[f0cf70c840] John Hawthorn 2022-11-23 22:01:03 UTC

Object Shapes のデバッグ用のマクロ SHAPE_DEBUG の定義を導入して VM_CHECK_MODE を使ってたところを一部このマクロでの分岐に置き換えています。

[8ffa8fc192] Takashi Kokubun 2022-12-01 23:37:18 UTC

拡張ライブラリ yaml のテストのタイムアウトを延ばしています。

[dcbea7671b] Takashi Kokubun 2022-12-02 00:13:38 UTC

YJIT の ARM 向けコード生成で STUR 命令のビット幅の指定の引数を間違えていたのを修正しています。 https://github.com/ruby/ruby/pull/6848

[def258e775] John Hawthorn 2022-12-01 19:51:18 UTC

struct rb_iseq_constant_body の mark_bits メンバーの位置を移動してよりメモリを省略したレイアウトにできるようにしています。

[652e2d8f5d] Hiroshi SHIBATA 2022-12-01 10:45:09 UTC

標準添付ライブラリ syntax_suggest の SyntaxError の detailed_message メソッドを再定義しているところでファイル名を切り出すのに PathnameFromMessage というモジュールを利用していたのが SyntaxError#path で不要になったので実装をおきかえています。 path は追加されたばかりだけど syntax_suggest は 3.2 以降しかサポートしないのかな。

[85a1c67a65] schneems 2022-12-01 19:27:59 UTC

標準添付ライブラリ syntax_suggest の 652e2d8f5d0e0210a4ef3cb541504433dbae57b3 の変更の続きでやはり path メソッドが呼べない古い ruby にも対応するため respond_to? でチェックして fallback 実装として元の実装を復活させています。

[8abf9e6ad0] Stan Lo 2022-12-02 01:05:07 UTC

irb の組み込みコマンド debug のテストを yamatanooroti を使ったテストから端末利用しないテストに移植してファイルを分離しています。

[d55d1a737b] Hiroshi SHIBATA 2022-12-02 01:34:00 UTC

標準添付ライブラリ syntax_suggest のテストで一部のテストを SyntaxError#path が定義されている 3.2 以降でだけ実行するようにしています。

[b6c66ead9d] Nobuyoshi Nakada 2022-12-02 03:08:25 UTC

8abf9e6ad0390e384ab47243ed4ece62a4d9cea0 で分離した irb の debug コマンドのテストで ruby コマンドを EnvUtil.rubybin を利用するなど細かな修正をしています。

[bc3ac86795] Yusuke Endoh 2022-11-28 05:52:13 UTC

rubygems のトップレベルで環境変数 BUNDLER_SETUP が設定されていたらそれを require するようにしていたのを Bundler モジュールがまだ定義されていない時だけ実行するようにしています。 --disable-gems オプションをつけて起動しわ時に "circular require" という警告が出てしまうのを避けるためだそうです。

[7e3b42d008] Takashi Kokubun 2022-12-02 04:42:57 UTC

irb の debug コマンドのテストに setup を追加してこのファイルのテストは ruby 本体上では実行しないようにしています。

[4fa47eabf2] Samuel Williams 2022-12-02 04:49:42 UTC

rb_fiber_new_storage() という関数の Doxygen 用コメントの storage 引数の説明が抜けていたのを追記しています。 https://github.com/ruby/ruby/pull/6849

[ad4eab1a8c] Nobuyoshi Nakada 2022-12-02 07:20:43 UTC

Thread と Kernel#fork を組み合わせて使った時のテストで Thread の終了待ちが漏れていたので Thread#join の呼び出しを追加しています。

[6930a2564c] Kazuhiro NISHIYAMA 2022-12-02 07:21:34 UTC

NEWS のチケット参照のリンクのための footnote の順序を並びかえています。

[b3890670b2] Kazuhiro NISHIYAMA 2022-12-02 07:21:49 UTC

NEWS の SyntaxError#path の追加についてのチケット参照のマークアップとチケット種類の誤記を修正しています。

[f01bfa8af7] Takashi Kokubun 2022-12-02 07:40:33 UTC

7e3b42d008de3c69c9e6bc1d127f28d91c0e88a9 のさらに続きで irb の debug コマンドのテストが GitHub Actions だけでなく RubyCI でも失敗するので逆に ruby/irb 上の GitHub Actions でのみ実行されるようにしています。

[07ac707758] Takashi Kokubun 2022-12-02 07:55:55 UTC

MJIT のための C の binding を生成する tool/mjit/bindgen.rb で Kernel#gemfile メソッドに明示的な引数 true を渡すように変更しています。コミットログによると bundle install を実行した時と同様の出力を行うためみたいです。

[7390eb43fe] Jean Boussier 2022-11-29 09:39:56 UTC

io.c の read_all() という関数で読み込みバッファが足りない時の拡張に制限がなくて不必要にバッファサイズを大きくしすぎてしまうことがあるみたいで 8MB という上限を設けてこれ以上大きくしないようにしています。 [ruby-core:42748] [Feature #6047]

[678bcfcaa6] Nobuyoshi Nakada 2022-12-02 08:39:30 UTC

拡張ライブラリ io/console の IO#raw, IO#raw!, IO#getch などのキーワード引数の min, intr, time などを最後の引数の Hash として扱って Symbol をキーとして参照していたのを rb_get_kwargs() を利用してキーワード引数として処理するように変更しています。

[21ed929e15] Nobuyoshi Nakada 2022-12-02 09:43:19 UTC

678bcfcaa686c0b3125c856a3fc53186126c7554 の拡張ライブラリ io/console の変更で追加したテストを JRuby では省略するようにしています。

[11871e49c4] HASUMI Hitoshi 2022-11-29 01:06:50 UTC

標準添付ライブラリ reline の IO#raw の呼び出しでキーワード引数の time を typo していたのを修正しています。これまでは最後の Hash の引数として扱かわれていたので間違えても単に無視されてしまっていたのが 678bcfcaa686c0b3125c856a3fc53186126c7554 でエラーになるようになったため。というかこの修正をみて io/console のほうを変更したのかもしれませんが。