ruby-trunk-changes 2023-07-25

今日は主に bundler で上書きする require で一部の元 default gems の gem を require する時に Gemfile に書かれてなかったら警告を出力するようにする変更などがありました。

[43a5c19135] Jean Boussier 2023-07-13 09:49:28 UTC

Module#class_eval や Binding#eval のバックトレースでのファイル位置を呼び元の位置を含めるようにしています。なるほどこれはわかりやすくなる。 [ruby-core:114074] [Feature #19755]

[14d1540768] Nobuyoshi Nakada 2023-07-24 14:57:28 UTC

include/ruby/internal/core/rstring.h の RSTRING_PTR() および RSTRING_END() で文字列バッファのポインタの NULL チェックを RUBY_DEBUG マクロが真に定義されている時だけにするようにしています。

[1faeb44dfc] Nobuyoshi Nakada 2023-07-24 14:59:50 UTC

include/ruby/io/buffer.h で __BYTE_ORDER__ や REG_DWORD といったマクロの値をチェックする preprocessor 分岐でそもそもこれらのマクロが定義されているかのチェックも追加しています。

[c4e893ceb5] Nobuyoshi Nakada 2023-07-24 15:01:52 UTC

vm.c の invoke_iseq_block_from_c() で VM_ARGC_STACK_MAX というマクロの値についての分岐を preprocessor 分岐でしていたのを通常の if 文の条件のなかに混ぜこむようにしています。

[cef60e93e6] Takashi Kokubun 2023-07-24 20:51:46 UTC

YJIT で send 系の VM 命令で JIT から抜けずに直接 vm_exec() の呼び出しをするように最適化しているようです。 https://github.com/ruby/ruby/pull/8106

[b106cf2eef] Alan Wu 2023-07-24 23:23:08 UTC

GitHub Actions の専用アクションのビルドの前処理をするアクションでソースツリー内に .downloaded-cache ディレクトリを掘っておくようにしています。

[f72ddd92be] Kentaro Takeyama 2023-07-23 01:19:50 UTC

bundler の man ページや File の定数の rdoc 用コメントの変更。これコミットログは bundler についてしか書いてないので Dir/File のほうはコミットミス?

[1b27e7aa1f] Nobuyoshi Nakada 2023-07-19 13:38:27 UTC

rubygems の再定義する require で Monitor#synchronize を利用するようにしています。

[70eeec0cad] Nobuyoshi Nakada 2023-07-19 13:42:20 UTC

rubygems の再定義 require で Enumerable#each のブロック内で break するかわりに Enumerable#find を使うようリファクタリング

[f5e03ef31c] Hiroshi SHIBATA 2023-07-19 07:35:41 UTC

bundler で default gems のいくつかが Gemfile に書かれてない状態で require された時に警告を出すようにしています。今は default gems ですが bundled gems に追い出そうとしているのでその準備のためみたいですね。

[95cde6e4c2] Hiroshi SHIBATA 2023-07-19 10:11:20 UTC

bundler で require を再定義する時に redefine_method という専用のメソッド? を利用していたのを Module#alias_method と Module#define_method を利用するように変更しています。

[bb61e45ae7] Hiroshi SHIBATA 2023-07-19 11:57:33 UTC

さらに bundler での require の再定義で Kernel#require を再定義する時に private メソッドとして定義するようにしています。

[a23fe8e84d] Hiroshi SHIBATA 2023-07-19 12:03:52 UTC

bundler の require の再定義処理で既に上書き済みだったら再処理しないようにしています。

[0ae227ebe2] Hiroshi SHIBATA 2023-07-20 00:10:33 UTC

a23fe8e84d8c73e45062008b4d020d47161858f3 の続きで bundler の require の再定義処理で上書き済みかチェックする対象に Kernel の特異メソッドのほうも追加しています。

[df4ac25bd9] Hiroshi SHIBATA 2023-07-20 00:34:25 UTC

bundler のテストに一部の gems の require で警告が出ることを確認するテストを追加しています。

[cc2617ae3f] Hiroshi SHIBATA 2023-07-20 01:41:00 UTC

bundler のテストで csv を利用しているところで警告が出るようになってしまうので gem の依存関係に追加するようにしています。

[2424b921b2] Hiroshi SHIBATA 2023-07-20 02:02:15 UTC

bundler で require 時に警告を出す gem のリストを Gem::BUNDLED_GEMS という定数として定義するように切り出しています。

[ec600332fc] Hiroshi SHIBATA 2023-07-20 02:05:53 UTC

bundler の再定義する require での警告を出す条件分岐をシンプルにリファクタリングしています。

[fc5dbea4c3] Hiroshi SHIBATA 2023-07-20 02:38:52 UTC

bundler の再定義する require で警告を出す gem 毎に ruby のどのバージョンから bundled になったかをメッセージに含めるようにしています。今のところすべて 3.4.0 から。

[64530b545f] Hiroshi SHIBATA 2023-07-20 03:58:26 UTC

fc5dbea4c3aca71b97db22b47b934454705ceed8 の続きで bundler の再定義する require の警告を出す対象に過去に default gems から bundled gems に移動した gem も追加しています。

[6bb34a7684] Hiroshi SHIBATA 2023-07-20 04:24:48 UTC

bundler の再定義する require で net-http.gem が net/http のように gem 名と require する feature 名をメッセージでちゃんと出し分けるようにしています。

[422144d220] Hiroshi SHIBATA 2023-07-20 08:49:07 UTC

bundler の require の再定義で Kernel の特異メソッドの上書きのために特異クラスを取り出すのに class << の構文を利用していたのを Module#singleton_class メソッドを利用するようにしています。

[8fbe7d0295] Hiroshi SHIBATA 2023-07-21 01:21:39 UTC

bundler の再定義する require で一部の元 default gems で警告を出すのが既に require 済みでも再度 require する都度出てたので抑制するようにしています。

[979d1fa5fe] Hiroshi SHIBATA 2023-07-21 03:21:44 UTC

bundler の再定義する require で警告する対象の gem のリストの定数の定義を lib/bundler/rubygems_ext.rb から削除して bundled_gems というところに追い出しているみたいです。がそのファイルがコミット漏れしてそう。

[cf1f2e9d06] Hiroshi SHIBATA 2023-07-21 03:30:49 UTC

bundler に rubocop によるスタイルの修正を適用しています。

[377639053d] Stan Lo 2023-07-25 09:39:53 UTC

標準添付ライブラリ reline の Reline::ANSI.scroll_down で端末のスクロールのためにエスケープシーケンスを利用していたのをシンプルに改行コード出力するように変更しています。 https://github.com/ruby/reline/pull/577

[99162dee7a] Nobuyoshi Nakada 2023-07-25 07:07:33 UTC

template/fake.rb.in で入力から行頭が "#" ではじまる行を削るようにしています。よくわからないですがこのコメント? の # がエスケープされて eval がエラーになりビルドエラーになることがあったみたいです。 [ruby-core:114062] [Bug #19751]