ruby-trunk-changes 2021-10-26

今日は主に bundler と rubygems の更新で bundler に独自に digest の実装を持つようにする変更や、ObjectSpace のヒープ内の連続した slot を確保してそこに埋め込めるようにする VWA の仕組みを文字列オブジェクトのバッファにも利用するようにした変更などがありました。

[5af3f7f357] Jean Boussier 2021-10-18 08:12:39 UTC

bundler に独自の SHA1 の digest の実装を追加しています。 digest.gem への依存を消すためだそうです。

[00c7b91f91] Yusuke Endoh 2021-10-25 11:43:42 UTC

Marshal のテストで未使用のローカル変数の警告抑制のため "_" アンダースコアで開始する変数名に変更しています。

[7da9c25aa4] Yusuke Endoh 2021-10-25 11:44:29 UTC

Refinements のテストで refine 内での include や prepend をしているところがあるので 3.1 から警告が出るようになったので警告抑制する(一時的に $VERBOSE を nil にする)ようにしています。

[1eac38c609] Yusuke Endoh 2021-10-25 11:45:05 UTC

RubyVM::AbstractSyntaxTree のテストでも未使用のローカル変数の警告抑制のため変数名を "_" アンダースコアで開始するようにしています。

[13068ebe32] Yusuke Endoh 2021-10-25 11:47:19 UTC

Process._fork というメソッドを追加して Kernel#fork の実体をこのメソッドの呼び出しにしています。 fork をフックしたい時にこれを再定義することで実現するためのもので、直接利用することはないメソッドとしてドキュメントにも注意書きがされています。 https://github.com/ruby/ruby/pull/5017 [ruby-core:103400] [Feature #17795]

[edc1813190] David Rodriguez 2021-10-20 16:49:34 UTC

bundler の変数名や引数の名前変更などのちょっとしたリファクタリングです。

[7b821bc9b5] David Rodriguez 2021-10-20 18:58:51 UTC

bundler の Bundler::RubygemsIntegration#download_gem でメソッド内で遅延した require "rubygems/remote_fetcher" を追加しています。

[57d990ddab] David Rodriguez 2021-10-20 19:01:13 UTC

bundler で rescue 節に例外オブジェクトを bind する変数名を明示しないようにコーディングスタイルを変更しています。これ明示するほうが良いスタイル(特殊変数の利用をやめる)なんだと思ってた。

[03a563b47e] David Rodriguez 2021-10-20 19:06:18 UTC

bundler のテストで不要な stub を削除しています。

[4edcda67b3] David Rodriguez 2021-10-20 19:15:52 UTC

bundler の Bundler::RubygemsIntegration#download_gem で fetcher.download を使うかわりに代替実装を追加しています。 cache まわりの不具合対応のためらしいです。

[4fc29d17b3] David Rodriguez 2021-10-21 10:38:53 UTC

bundler で gem の cache 探索時の default gems の考慮する位置を移動しています。

[f7f85c1feb] David Rodriguez 2021-10-20 22:04:09 UTC

bundler の gem cache のファイルパスの管理方法を変更しているようですが詳細はわからなかった。

[7073870dfa] David Rodriguez 2021-10-21 18:28:02 UTC

Bundler::Source::Rubygems#cached_path の実装を見やすくリファクタリングしています。

[f6d1909500] David Rodriguez 2021-10-14 10:10:22 UTC

bundler のテストでエラーメッセージの変更に追随する修正。

[00412be204] David Rodriguez 2021-10-14 10:03:51 UTC

bundler でファイル書き込みのパーミッション不足の時のエラーメッセージを修正しています。

[b4a43e4f57] David Rodriguez 2021-10-14 10:03:57 UTC

bundler のファイルの権限エラー時のエラーメッセージの修正。

[9fbf3a1f6f] David Rodriguez 2021-10-11 13:42:39 UTC

bundler の bundle issue というサブコマンドやエラー発生時にエラー報告を促すメッセージを変更しています。

[a959342abf] David Rodriguez 2021-10-11 10:43:07 UTC

rubygems 内で require "digest" しているところに書かれてたコメントを削除しています。デッドロック回避のために追加されてたみたいですが現在は実際には不要になってるようです。しかし require 自体は消していません。

[9d28618091] David Rodriguez 2021-10-10 15:21:53 UTC

rubygems で digest を利用していたのを openssl 内の digest 実装を利用するように変更しています。

[5bcef26d24] Yusuke Endoh 2021-10-25 12:28:44 UTC

MJIT のテストで setup 内で at_exit で VM 命令の全てをテストしたことを確認するブロックを登録していたのを pid を保存しておいて同じプロセスでのみ実行するようにしています。fork すると at_exit が子プロセスで実行されてしまうからみたいです。そうなのかー。

[1c0c8d5da2] Yusuke Endoh 2021-10-25 12:30:16 UTC

MJIT のテストに VM 命令の checkmatch を利用するメソッドをコンパイルさせるテストケースを追加しています。

[e943511455] "Ian C. Anderson" 2021-10-25 14:40:33 UTC

YJIT に VM 命令の duphash の JIT 対応を追加しています。YJIT の実装はまだ見てなかったのですが、なるほどこんなふうに VM 命令毎に実行コード生成の指定をしていくんですね。 https://github.com/ruby/ruby/pull/5009

[244c98e635] Alan Wu 2021-10-25 14:45:22 UTC

YJIT を無効にしてビルドした時に空の関数の実装にしてバイナリサイズを減らすようにしています。 https://github.com/ruby/ruby/pull/5003

[557fa38915] Jean Boussier 2021-10-25 15:02:42 UTC

bundler で独自の digest 実装に Array#pack に "Q" を渡してシステムがリトルエンディアンであることに依存していたので "Q>" を使ってビッグエンディアンで pack させるようにしています。

[33113c6b64] git 2021-10-25 16:51:20 UTC

version.h の日付更新

[09fa773e04] Yusuke Endoh 2021-10-25 16:58:01 UTC

RubyVM::InstructionSequence にスクリプトの内容を入れるのに再度スクリプトから読まずに ISeq に保持されてる情報を利用するようにしています。 https://github.com/ruby/ruby/pull/5019

[46b66eb9e8] Peter Zhu 2021-08-02 16:16:24 UTC

struct RString のメンバーで短い文字列のバッファを struct RVALUE の中に埋め込むための共用体のメンバーをさらに struct の中にネストさせるようにしています。おーこれって互換性は大丈夫なのかな、と思ったけどバイナリ互換性はおそらく大丈夫だし拡張ライブラリからは RSTRING_PTR() みたいなマクロでアクセスすべきってことになってるので大丈夫か。 [ruby-core:105544] [Feature #18239]

[6374be5a81] Peter Zhu 2021-08-02 18:22:47 UTC

class.c で rb_gc_rvargc_object_data() という関数を利用するのをやめています。 [ruby-core:105544] [Feature #18239]

[a5b6598192] Peter Zhu 2021-08-26 14:06:32 UTC

struct RClass に続いて struct RString も USE_RVARGC マクロが真に定義されている時に struct RVALUE の slot を複数まとめて確保して文字列バッファをそこに埋め込むことができるようにしています。埋め込む最大のサイズは SIZE_POOL_COUNT で決まるので struct RVALUE の 4つぶんかな? [ruby-core:105544] [Feature #18239]

[cf52a2c9ba] Maxime Chevalier-Boisvert 2021-10-25 18:28:39 UTC

.github/CODEOWNERS というファイルを追加して yjit* と doc/yjit/ の配下および bootstraptest/test_yjit* の reviewer に @maximecb と @xrxr を指定するようにしています。

[722d43ad5e] Maxime Chevalier-Boisvert 2021-10-25 18:29:36 UTC

yjit.h に PR 作成のテストのため? 余分な空白を追加しています。

[10fe8495cd] Maxime Chevalier-Boisvert 2021-10-25 18:53:22 UTC

cf52a2c9ba0e2add78f50c32dfadda8e7808d2e9 に続いて .github/CODEOWNERS に test/ruby/test_yjit* も追加しています。また 722d43ad5e2685c4ca6edf090755eeca1a8cc8ce は revert しています。

[92ec010595] Jenny Shen 2021-10-06 21:39:23 UTC

rubygems の gem cert サブコマンドに --key-algorithm というオプションを追加して RSA 以外の鍵の種類を使った署名ができるようにしているようです。

[748688a63d] 卜部昌平 2021-10-22 02:15:10 UTC

GitHub Actions の workflow 設定で make のオプションに渡すフラグのために JOBS という環境変数を使っていたのを GNUMAKEFLAGS に設定してコマンドラインで明示的に渡さなくても良いようにしています。

[b682f76339] 卜部昌平 2021-10-25 04:39:27 UTC

748688a63d8ab621d4b2ab91cbccb5cad2c7797cGitHub Actions で利用するようにした GNUMAKEFLAGS が macOS 版では効かなかったようなので MAKEFLAGS という変数に変更しています。

[b49ec78fd0] 卜部昌平 2021-10-25 05:05:30 UTC

GitHub Actions の設定 .github/workflows/baseruby.yml で make コマンドをオプションつきで make という変数に設定して使っていたのも GNUMAKEFLAGS 環境変数を利用するように書き換えています。

[a0029ae2b6] 卜部昌平 2021-10-26 00:24:56 UTC

struct RString の構造体内の doxygen 用コメントの typo 修正。

[7d4c59203f] 卜部昌平 2021-10-26 00:30:42 UTC

struct RString の構造体内のコメントがレイアウト変更? 時に正確にドキュメント化されなくなっていたのを修正しています。

[5c2b644166] Koichi Sasada 2021-10-26 02:35:57 UTC

IO.io_wait に不正な fd を持つ IO を渡すテストで IO.for_fd を使って fd を close していたので assert_separately を使って子プロセスで実行させるようにしています。 7864efa105921eb3900c843126f2e0db02b9c6aea1c4cab11d613d7df037a81a770ee44a23a2e9be で parallel test で使う pipe の close のエラーの調査をしていたやつの原因みたいで、fd を close した IO を作ってしまうので、その IO が GC で回収される時にその fd が別の IO で(つまり parallel test 用の pipe で)再利用されているとそれを誤って close してしまうという悲劇が発生していたようです。

[049e1f8560] Nobuyoshi Nakada 2021-10-25 01:03:17 UTC

io.c の DEFULT_IOCTL_NARG_LEN というマクロを DEFAULT_IOCTL_NARG_LEN に修正しています。

[37395ffa05] Shugo Maeda 2021-10-26 10:34:27 UTC

6606597109bdb535a150606323ce3d8f5750e1f6 で導入した Refinement クラスの特異クラスを初期化時に明示的に作成しておくようにします。特異クラスは普通必要になった時に生成されるようになっていますが、Refinement クラスは Module を継承したクラスとして定義されていて、特異クラスがないと Module の特異メソッドが継承されないためとのこと。一般的に Class/Module の特異メソッドは継承したクラスからも呼べると思うけど、Refinement は boot_defclass() という特別なブートストラップ用の関数で定義されているので特異クラスが作られてなかったからかな。

[e1ecda297e] Nobuyoshi Nakada 2021-10-26 11:12:15 UTC

parse.y の negate_lit() という関数でオブジェクトが T_FLOAT 型だった時に struct RFloat の float_value メンバーだけ差し替えるようにしていたのを DBL2NUM() で新たなオブジェクトを作って(といってもほとんどの場合即値になっているはず?)それを返すようにしています。 Float は常に freeze されるようになっているので、 AST に埋め込まれているとはいえ内容を破壊的に変更するのは避けるようにしているのだと思います。

[afdca0e780] Nobuyoshi Nakada 2021-10-26 11:14:19 UTC

double の変数が align されていないアドレスに置かれていないといけない環境向けの struct RFloat の操作の修正をしています。そのような環境だと struct RFloat::float_value を直接使えないので変数に memcpy() でコピーして参照/セットするようにしています。