ruby-trunk-changes 2021-12-27

今日は ruby のバージョンが 3.2.0 に更新され、RubyVM::AbstractSyntaxTree.of が -e オプションで渡されたスクリプト内で定義されたメソッドなどにも対応する変更や 3.2 から廃止する予定だった taint/untaint/untrust などの機能の削除などの整理のほかに Windows で YJIT サポートできるように mmap() や mprotect() の代替実装を提供する変更などがありました。

[0dc7816c43] Yusuke Endoh 2021-12-26 10:41:42 UTC

RubyVM::AbstractSyntaxTree.of がコマンドラインオプションの -e で渡されたコード片で定義されたメソッドなどには使えなかった(eval で定義されたのと同様の扱いだった)のを -e で定義されたものは受付けるように変更しています。チケットをみると動機としてはこれを利用した error_highlight が対応するためみたいです。 [ruby-core:106826] [Bug #18434]

[81c248924d] "Yukihiro \"Matz\" Matsumoto" 2021-12-25 14:56:01 UTC

include/ruby/version.h の RUBY_API_VERSION_MINOR が 2 に更新されました。 開発版が 3.2.0 となりました。

[39bc5de833] Nobuyoshi Nakada 2021-12-26 09:07:12 UTC

3.2 で削除する予定と予告されていた Kernel#taint, Kernel#tainted? などのメソッド群や tainted フラグに関する C API rb_obj_taint() や rb_obj_tainted()、rb_obj_untaint() 等々を削除しています。

[69f03c864e] Nobuyoshi Nakada 2021-12-26 14:17:14 UTC

既に deprecate 警告が出るようにしていた Refinement#include と Refinement#prepend を削除しています。これも 3.2 で削除予定とされていました。

[7c738ce5e6] Nobuyoshi Nakada 2021-12-26 09:02:09 UTC

拡張ライブラリから使われてる可能性があった rb_cData を削除しています。これは警告で 3.1 から消すと予告されていましたが 3.1 では消し忘れてたので 3.2 から削除とあいなりました。また rb_data_object_check() で警告を出力して T_DATA 型のオブジェクト確保時に警告が出るようにしています。これたぶん確保する都度なので場合によってはめっちゃ警告が出そう。 [ruby-dev:51128] [Bug #18433]
[追記]一度警告を出した時に allocate を undef するので警告は 1度しか出ないそうです。[/追記]

[abad017354] Nobuyoshi Nakada 2021-12-26 13:40:50 UTC

rubyspec で正規表現の後方参照を使って大文字小文字無視のマッチをしている時の不具合修正が 3.1 で行なわれなかったのでひとまず再現確認の spec の実行対象を 3.2 までに拡張しています。 [ruby-core:81742] [Bug #13671]

[c956f979e5] Nobuyoshi Nakada 2021-12-26 13:39:48 UTC

Struct.new の keyword_init キーワード引数の指定がなかった時と明示的に false が渡された時とでそのクラスのインスタンスを作成する時にキーワード引数を受付けるかどうかの挙動を変更し、指定しなかった場合にキーワード引数を受け取った時の警告メッセージを削除しています。 [ruby-core:98014] [Feature #16806]

[3a223aec2e] Nobuyoshi Nakada 2021-12-26 15:14:24 UTC

GitHub Actions の bundled gems のテストで rbs のテストが失敗するみたいなのでエラーを無視するように設定しています。

[1f877fa238] git 2021-12-26 15:34:11 UTC

version.h の日付更新

[9736cb890b] Nobuyoshi Nakada 2021-12-26 23:56:00 UTC

bundler で Kernel#untaint を利用しているところがあったので Kernel.method_defined? でチェックしてから呼ぶようにしています。

[73707e5c51] Masataka Pocke Kuwabara 2021-12-26 03:28:57 UTC

rubygems の Gem::SpecificationPolicy に autoload を設定しています。

[ca3a2e46e8] David Rodríguez 2021-12-26 16:41:21 UTC

bundler のテストでテストに使う Gemfile.lock の ruby バージョンの指定のチェックのため RUBY_VERSION をモンキーパッチしてたのをやめています。コミットログみると String#untaint がなくなったために判定に使ってる RUBY_VERSION を変更すると untaint を呼んでしまうからとのことですが、respond_to? とかでチェックすれば良いのではなかろうか……。

[03903f23c2] David Rodríguez 2021-12-26 18:44:24 UTC

ca3a2e46e8098bc66e2ab1589934bb40f00b78b1 の続きで bundler のテストで RUBY_VERSION を偽装するための実装を削除しています。

[810c1b88ca] David Rodríguez 2021-12-24 00:35:12 UTC

bundler のテストで不要になった helper 用モジュールの include を削除しています。

[fb0737654c] David Rodríguez 2021-12-24 00:36:14 UTC

bundler のテストでテスト用の gemspec ファイルのセットアップでの依存関係追加の前処理を必要な spec の部分に限定するようにリファクタリング

[b7e5ce08ff] David Rodríguez 2021-12-24 00:46:04 UTC

bundler のテスト用の bundle コマンド実行用ヘルパーメソッドで verbose オプションを設定していたのをやめています。

[d6311cb1ca] Hiroshi SHIBATA 2021-12-27 00:41:55 UTC

rubygems と bundler を upstream からそれぞれ 3.4.0dev と 2.4.0dev というバージョンでマージしています。

[f486566f13] git 2021-12-27 01:48:03 UTC

NEWS の default gems のバージョン一覧の RubyGems と bundler の項目を追加しています。

[85a426dc86] "U.Nakamura" 2021-12-27 06:56:23 UTC

Windowsmmap(2) が使えないために YJIT が無効になるのを避けるため VirtualAlloc() の wrapper として代替実装を追加して YIJT が有効にできるようにしています。しかし VM のメインループの実装タイプとして OPT_DIRECT_THREADED_CODE または OPT_CALL_THREADED_CODE しか対応していなくて VC では未対応なので実際には JIT コンパイルされたコード実行はされないようです。

[9790f54bff] "U.Nakamura" 2021-12-27 07:38:29 UTC

85a426dc8678f04a78ffd799943b690ce2984c49 の続きで Windows 環境で mprotect() はなにもしないように定義していたのを PROT_EXEC フラグが指定されてたら FlushInstructionCache() という API の wrapper として実装を追加しています。しかしビットフラグのチェックが "|" 演算子になってて "&" の間違いっぽい。

[4e007d705c] "U.Nakamura" 2021-12-27 08:15:09 UTC

85a426dc8678f04a78ffd799943b690ce2984c499790f54bff387b57579dc6f588bc29735eeae85b のさらに続きで Windows 環境で mprotect(2) の代替実装を rb_w32_mprotect() という関数に切り出して PROT_WRITE と PROT_READ にも対応した実装が……と思ったらそこはコメントアウトされた状態なのでやっぱりまだ未対応なようです。

[a74a2f456a] "U.Nakamura" 2021-12-27 08:29:16 UTC

コマンドラインオプションのテストで --version で YJIT 有効になったことが表示されるのを確認するテストを mswin64 でも実行するようにしています。

[56a0f34d31] Nobuyoshi Nakada 2021-11-03 10:10:09 UTC

標準添付ライブラリ drb の DRb::ExtServManager#regist と #unregist をそれぞれ #register と #unregister に改名しています。互換性のため元の名前も alias として残しています。