ruby-trunk-changes 2023-03-23

今日は主に Object Shapes の最適化、VM 命令へのコンパイル時の最適化、 rubygems と bundler の更新などがありました。

[27916db08c] Nobuyoshi Nakada 2023-03-22 13:35:58 UTC

テストに使う assert_pattern_list という assertion メソッドの使い方のコメントにパターンとして文字列も受け付けることを追記しています。

[e340eb2106] Nobuyoshi Nakada 2023-03-22 14:07:26 UTC

処理時間がデータ量に比例することを確認する assertion メソッド assert_linear_performance で Enumerable#filter_map を利用していたのを map に変更しています。 filter_map が古い ruby で使えないため。

[1a9e2d20e2] Aaron Patterson 2023-03-17 18:39:35 UTC

Object Shapes で rb_shape_t のエントリを新規作成する時に rb_shape_t::edges メンバーを NULL で初期化しておくようにしています。ついでに rb_shape_t の配列を確保する時のサイズの指定するマクロを SHAPE_BITMAP_SIZE で word 数で指定していたのを SHAPE_BUFFER_SIZE としてバイト数を定義しておくように変更しています。また MAX_SHAPE_ID を SHAPE_BUFFER_SIZE で定義するようにしています。 MAX_SHAPE_ID はバイト単位のサイズと同じでいいんだろうか? sizeof(rb_shape_t) がいくつ入るかじゃないのかな?

[e055c0c716] Aaron Patterson 2023-03-09 23:50:58 UTC

shape.c の rb_shape_alloc()、rb_shape_alloc_with_size_pool_index()、rb_shape_alloc_with_parent_id() といった rb_shape_t を確保する関数を static 関数に変更しています。

[999ccb2b6b] Aaron Patterson 2023-03-22 15:47:29 UTC

rb_shape_alloc_with_size_pool_index() を削除して rb_shape_alloc() と統合するリファクタリング

[0519741702] Aaron Patterson 2023-03-09 23:58:22 UTC

shape.c の get_next_shape_internal() から子ノードに新たに追加する rb_shape_t を確保する処理を rb_shape_alloc_new_child() という関数に切り出すリファクタリング

[7c307e0379] Aaron Patterson 2023-03-13 22:07:09 UTC

Object Shapes の実装で rb_shape_t::edges の管理用の rb_id_table の確保を遅延して必要になるまでテーブルを生成しないようにしてメモリ使用量を節約しています。

[348412c7fa] Nobuyoshi Nakada 2023-03-21 09:57:58 UTC

bundler の実装と rubygems のテストで <<- によるヒアドキュメントに gsub で先頭の空白除去をしているところを <<~ によるヒアドキュメントを利用するように変更しています。

[3210130993] Peter Zhu 2023-03-22 20:36:47 UTC

758e4db551e7e80a65b610cc73fcb61e74ec5a0c で Process.pid のキャッシュのための static 変数を GC から保護するための mark が必要か判定するために追加した処理で process.c で rb_pid_t の型のサイズによって警告が出る環境があるため RBIMPL_WARNING_IGNORED() マクロを利用してい局所的に -Wtype-limits の警告オプションを off にするようにしています。

[fee9044b25] "dependabot[bot]" 2023-03-23 03:01:09 UTC

GitHub Actions の workflow で利用しているアクション github/codeql-action のバージョンを更新しています。

[e5a5e43c36] Koichi Sasada 2023-03-17 07:00:34 UTC

compile.c の compile_builtin_mandatory_only_method() で rb_vm_t::builtin_inline_index を一時退避して復旧させていたのをやめています。 f29c9d6d36ebeb3e768a514cbfa00cd2ab35fcbc で if/unless 文などで決して通らないとわかっている部分はコンパイルしなくなったために不要になったとのこと。

[c9fd81b860] Koichi Sasada 2023-03-09 16:30:30 UTC

ISeq へのコンパイル時の peephole optimization で VM 命令 opt_invokebuiltin_delegate_leave を利用するようにした時に不要な場合(引数がない時?)に VM スタックのフレームを積むのを省略する最適化。

[0112a5b342] Koichi Sasada 2023-03-09 16:33:00 UTC

Array#first と Array#last を ruby 実装するようにしています。

[db7c38634e] Nobuyoshi Nakada 2023-03-22 16:13:23 UTC

assert_linear_performance の実装で Timeout.timeout を使う時に明示的に Timeout::Error 例外を投げるように指定しています。

[7e3612585d] Hiroshi SHIBATA 2023-03-22 03:08:13 UTC

rubygems に rubocop によるスタイルの変更指示を適用しています。

[25ed2e7415] Hiroshi SHIBATA 2023-03-22 03:10:38 UTC

rubygems に rubocop によるスタイルの変更指示を適用しています。

[1a60012612] Hiroshi SHIBATA 2023-03-22 03:25:40 UTC

rubygems に rubocop によるスタイルの変更指示を適用しています。

[ec131071b9] Hiroshi SHIBATA 2023-03-22 03:29:50 UTC

rubygems に rubocop によるスタイルの変更指示を適用しています。けどこれ Gem::Specification#version= の戻り値変わっちゃいそうだけどいいのかな?

[01be518eba] Hiroshi SHIBATA 2023-03-22 03:47:40 UTC

rubygems に rubocop によるスタイルの変更指示を適用しています。

[8260698e74] Hiroshi SHIBATA 2023-03-22 03:48:40 UTC

rubygems に rubocop によるスタイルの変更指示を適用しています。

[5efadf8139] Hiroshi SHIBATA 2023-03-22 03:55:33 UTC

rubygems に rubocop によるスタイルの変更指示を適用しています。

[8a364b8512] Hiroshi SHIBATA 2023-03-22 04:14:27 UTC

rubygems に rubocop によるスタイルの変更指示を適用しています。

[bec069b0ca] Hiroshi SHIBATA 2023-03-22 04:17:33 UTC

rubygems に rubocop によるスタイルの変更指示を適用しています。

[0eef33e113] Hiroshi SHIBATA 2023-03-22 04:26:37 UTC

rubygems に rubocop によるスタイルの変更指示を適用しています。

[048230ded3] Hiroshi SHIBATA 2023-03-22 04:54:59 UTC

rubygems に rubocop によるスタイルの変更指示を適用しています。

[a3670249fa] Hiroshi SHIBATA 2023-03-22 05:35:56 UTC

rubygems に rubocop によるスタイルの変更指示を適用しています。

[19e9c4004b] Hiroshi SHIBATA 2023-03-22 05:54:18 UTC

rubygems に rubocop によるスタイルの変更指示を適用しています。

[2e3cd1dc3e] Hiroshi SHIBATA 2023-03-23 01:16:17 UTC

rubygems に rubocop によるスタイルの変更指示を適用しています。

[50a03035ee] Hiroshi SHIBATA 2023-03-22 03:13:44 UTC

rubygems に rubocop によるスタイルの変更指示を適用しています。

[4dd418f877] Hiroshi SHIBATA 2023-03-17 09:33:55 UTC

rubygems に rubocop によるスタイルの変更指示を適用しています。

[f24a86d83f] Hiroshi SHIBATA 2023-03-17 09:36:42 UTC

rubygems に rubocop によるスタイルの変更指示を適用しています。

[acf12b6dfd] Hiroshi SHIBATA 2023-03-22 05:18:10 UTC

rubygems に rubocop によるスタイルの変更指示を適用しています。

[4e7c39f98c] David Rodríguez 2023-03-17 12:39:20 UTC

bundler の Gemfile.lock の platform の処理を修正。

[8e6bbc032c] David Rodríguez 2023-03-16 17:37:42 UTC

4e7c39f98ceaf5160d9a97b7d2405623f972773a の続き。 bundler の Gemfile.lock の platform 処理の修正。

[ebebc90ec2] David Rodríguez 2023-03-16 19:11:18 UTC

よくわかりませんが bundler の依存関係解決で不完全な spec? の処理のリファクタリングだそうです。

[a757e21bc0] David Rodríguez 2023-03-16 19:15:52 UTC

bundler の Bundler::SpecSet でメソッド再利用するリファクタリング

[f8ecf145ce] なつき 2023-03-16 03:52:46 UTC

rubygems の Gem::Ext::RakeBuilder.build でコマンドラインオプション -I でのロードパス指定が不要な時に省略するよう変更しています。

[e46d473396] なつき 2023-03-17 01:09:45 UTC

同じく rubygems の Gem::Ext::ExtConfBuilder.build でも -I オプションによるロードパス指定が不要なときに付けないように修正しています。

[1b408e659a] なつき 2023-03-17 16:48:52 UTC

同じく f8ecf145cee5a2af4cf48a2c0b6bf600886b8b96e46d473396401f8f320b4a5b8f638630ab42fa4crubygems の修正でコマンド起動のため Gem.ruby を参照しているところをメソッドに切り出しています。またここで shellwords でコマンド文字列を分割する処理を共通部分に追加しています。

[6ad6ae680a] Hiroshi SHIBATA 2023-03-17 09:04:41 UTC

rubygems の gem exec コマンドのテストを rubyリポジトリ内では skip するようにしています。

[a9fd1860dd] David Rodríguez 2023-03-17 14:42:28 UTC

bundler で spec の同一性チェックのロジックを修正しているようです。

[069640d355] Mau Magnaguagno 2023-03-16 16:31:40 UTC

rubygems の tar アーカイブを読む Gem::Package::TarHeader のチェックサム確認で不要な整数化と中間配列生成をなくす最適化。 String#sum なんてあったっけ?

[164dc58008] David Rodríguez 2023-03-16 14:44:51 UTC

bundler で rescue 節をまとめるリファクタリング。ちょっとメッセージが変わる場合があるみたいですが分ける必要ないという判断のようです。

[c3fa6679e6] David Rodríguez 2023-03-16 14:46:47 UTC

164dc580084b10d46f1c44de5c36d907b0f6a385 と同様だと思いますが bundler で例外メッセージから bundle install に --full-index オプションをつけることを suggest していた部分を削除ちえいます。

[a9146bd81e] David Rodríguez 2023-03-16 14:47:55 UTC

c3fa6679e64eb08a68723d3c757ae6dd14384e21 と同様に bundler のエラーメッセージから --full-index をつけることを suggest しているところを削除しています。

[3563e1383f] Jean Boussier 2023-03-03 07:40:00 UTC

1db8951d3a8be6a756c9d3d3b87231997b301985 の Process.pid のキャッシュするようにした実装でキャッシュをクリアするのを rb_process_atfork() という関数を追加していたのを既存の関数 after_fork_ruby() に pid を渡してこの中でクリアするように変更しています。よくわかってませんが timer thread での fork の検出にも同じロジックを使いまわすようにしているようです。 [ruby-core:112457] [Feature #19443]

[310af50c3b] Nobuyoshi Nakada 2023-03-23 11:43:37 UTC

標準添付ライブラリ time の .gemspec ファイルで spec.required_ruby_version のバージョンを 2.4.0 以降に引き上げています。