ruby-trunk-changes 2023-03-25

今日は主に Dir.for_fd や Dir.fchdir、Dir#chdir メソッドなどのディレクトリ操作のメソッド追加や Hash の一部メソッドで引数の Hash の compare_by_identity フラグが引き継がれない場合があった不具合の修正などがありました。

[7149f5763e] MSP-Greg 2023-03-23 15:44:00 UTC

rubygems のテストで GitHub Actions での mswin の時だけ skip するようにしていたテストの skip 条件を mswin 環境で rubyリポジトリ内でのテストの場合にのみ skip するように変更しています。また mswin 環境であることの確認にヘルパーメソッドを利用するようにしています。

[35e9b5348d] Alan Wu 2023-03-24 16:36:06 UTC

YJIT 用の関数 rb_c_method_tracing_currently_enabled() の引数に const 修飾子を追加しています。 Rust から呼ぶ際にこれで mut をつけたキャストが不要になるみたいです。 https://github.com/ruby/ruby/pull/7591

[d3197def88] Jeremy Evans 2022-11-09 17:23:45 UTC

Hash[] で compare_by_identity で同一性でキーを評価する Hash から新たな Hash を作成する時にそれが空だとその compare_by_identity フラグを引き継いでいなかったので、一貫性のため引き継ぐように変更しています。 [ruby-core:110663] [Bug #19113]

[1b13db25d8] Jeremy Evans 2022-11-09 17:37:04 UTC

d3197def882b47e7c57cdddfe8d62f62fef9d3f7 の続きで Hash#ruby2_keywords_hash でも compare_by_identity フラグを引き継ぐように変更しています。 [ruby-core:110663] [Bug #19113]

[5d6579bd91] Jeremy Evans 2022-11-09 17:59:25 UTC

d3197def882b47e7c57cdddfe8d62f62fef9d3f71b13db25d8ed0f328acc4e86668f8ad7deae7221 のさらに続きで Hash#compact の実装で Hash が空の時に compare_by_identity フラグを引き継ぐように変更しています。 [ruby-core:110663] [Bug #19113]

[466ca7ae20] Jeremy Evans 2023-01-16 21:29:43 UTC

Dir.fchdir メソッドを新規追加して file descriptor の整数を元にしてその fd が示すディレクトリに移動するという fchdir(2) システムコールを呼べるようにしています。 [ruby-core:111842] [Feature #19347]

[3be65f63c7] Jeremy Evans 2023-02-09 20:45:52 UTC

466ca7ae205126c7cac83735db887d69e293f816 の続きで Dir#chdir メソッドを追加して Dir オブジェクトが指すディレクトリにカレントディレクトリを移動することができるようにしています。内部実装は fchdir(2) が使えれば開いている fd を元に fchdir(2) で移動して、なければ保存しているパスを元に移動するようです。ディレクトリを削除/再作成などした時に環境によって微妙に挙動が違うことがありえそうですね。 [ruby-core:111842] [Feature #19347]

[836e9a192b] Jeremy Evans 2023-02-09 21:34:37 UTC

466ca7ae205126c7cac83735db887d69e293f816 からの続きで Dir.for_fd というクラスメソッドを新規追加して file descriptor の整数を元にその fd が指すディレクトリを表現する Dir オブジェクトを返すようにしています。 [ruby-core:111842] [Feature #19347]

[6c60006de5] Jeremy Evans 2023-02-10 18:33:53 UTC

IO.read メソッドの省略可能な第3引数 offset に負の数を渡した時にチェックをしていなくて実際に seek をしてしまって Errno::EINVAL が発生していたのを ArgumentError 例外を発生させるように変更しています。 [ruby-core:112051] [Bug #19380]

[27b1a2992f] Nobuyoshi Nakada 2023-03-24 09:07:02 UTC

Object Shapes の SHAPE_BUFFER_SIZE の定義を shape_id_t の型の定義にあわせて変更するようにしています。shape_id_t が 16bits の時に SHAPE_BUFFER_SIZE が大きすぎて問題があったようです。

[59c3fac6c4] Jimmy Miller 2023-03-24 21:01:59 UTC

YJIT の rest 引数とブロック引数を受け取るメソッドの呼び出しのサポートのリトライ。 https://github.com/ruby/ruby/pull/7584

[09295ea796] Kasumi Hanazuki 2023-03-24 23:12:23 UTC

IO::Buffer#resize でサイズに 0 が指定された時に内部のバッファを解放するようにしています。 realloc() に 0 を渡した時の挙動が環境によって異なるのでそれを避けるためとのこと。 https://github.com/ruby/ruby/pull/7569

[c08fe40872] Jeremy Evans 2023-03-24 23:16:32 UTC

836e9a192ba4fdc56a2d3d94f5840869f77fd3bf で追加した Dir.for_fd の rdoc 用コメントの call-seq でメソッド名が Dir.fdopendir になっていたのを修正。

[276f4be96d] Jean Boussier 2023-03-24 13:30:19 UTC

bundler の bundle gem で拡張ライブラリを含む gem を作成した時に extconf.rb で $CFLAGS に -fvisibility=hidden を追加するようにしています。関数名などのシンボルの衝突をさけるため不要なシンボルは公開しないようにするのをデフォルトにするため。

[466aa8010f] Samuel Williams 2023-03-25 05:36:27 UTC

non-blocking Fiber のためのインターフェースの関数群 rb_fiber_scheduler_io_xxxx() の引数 length や offset に誤って off_t や size_t の変数をそのまま渡せばいいところを VALUE 型に変換してしまっていたところを修正しています。これよく動いてたな。というかあんまり使われてなかったのか。 https://github.com/ruby/ruby/pull/7593

[1dd65f7c55] Takashi Kokubun 2023-03-22 05:55:23 UTC

RJIT でメソッドの呼び出し時の引数の渡しかたで配列を splat して渡す呼びかたをサポートするようにしているみたいです。よく読めてないけどまだメソッド定義の rest 引数と splat した時の配列がうまく対応した場合のみのサポートみたいです。

[314c7dd6d1] Takashi Kokubun 2023-03-25 07:52:07 UTC

1dd65f7c55d146c9ea968385c9a733bdc47f024a の続きで RJIT で C 実装のメソッドの呼び出し時の splat 引数渡しをサポートしているようです。

[85a55d3e75] Takashi Kokubun 2023-03-25 07:59:32 UTC

1dd65f7c55d146c9ea968385c9a733bdc47f024a の続きで RJIT のメソッドへの引数の渡しかたで未対応の時のカウンタの種類をひとつ減らしているようです。

[9bc2dbd33c] Takashi Kokubun 2023-03-25 08:07:36 UTC

1dd65f7c55d146c9ea968385c9a733bdc47f024a からの続きで RJIT のメソッド呼び出しで splat 引数渡しをする時に省略可能引数があるメソッドの呼び出しもサポートするようにしているようです。