今日は 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
Windows で mmap(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
85a426dc8678f04a78ffd799943b690ce2984c49 と 9790f54bff387b57579dc6f588bc29735eeae85b のさらに続きで 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 として残しています。