ruby-trunk-changes 2021-12-02

今日は YJIT のメモリ不足時の対応や mmap() の mode のために一部の環境で無効にしていた問題の対応、bundler の依存関係解決の修正、ripper の内部クラスを Struct を使わないようにするリファクタリングなどがありました。

[d0772632bf] Alan Wu 2021-11-20 04:44:13 UTC

YJIT で実行コードを配置するメモリ領域が確保できなかった時に rb_bug() で異常終了していたのを、メモリ確保できなかった時の後始末を実装して JIT コンパイルをあきらめるように対応しています。

[eb7ec00d03] git 2021-12-01 17:25:52 UTC

version.h の日付更新

[94ee88b38c] Vít Ondruch 2021-10-27 14:28:24 UTC

rubygems の Gem::Security.email_to_name で返す OpenSSL::X509::Name を文字列を構築して OpenSSL::X509::Name.parse で作るのでなくて直接 OpenSSL::X509::Name.new で作成するようにリファクタリングしています。parse で正しく解析されないことがあったみたいです。

[157095b3a4] Aaron Patterson 2021-10-26 23:57:30 UTC

YJIT で実行コードを配置するメモリ領域を mmap() する時の mode のビットに PROT_WRITE と PROT_EXEC が同時についていると NG な環境があるので、書き込み時と実行時でフラグを切り替えるようにしています。

[4079f0da51] Aaron Patterson 2021-11-22 20:32:47 UTC

157095b3a44d8b0130a532a0b7be3f5ac197111c の追加修正で YJIT のコード領域の PROT_EXEC フラグを立てる cb_mark_all_executable() の呼び出しを対象のメモリポインタが NULL の時に呼ばないようにする分岐を追加しています。

[3b2b28d035] Aaron Patterson 2021-12-01 20:46:30 UTC

157095b3a44d8b0130a532a0b7be3f5ac197111c の変更で OpenBSD で YJIT 実行が可能になったはずなので無効にしていた 119626da947bf6492ef7a27abf3bf12de5d0d95a を revert しています。

[9121e57a5f] Alan Wu 2021-07-13 23:01:09 UTC

TracePoint で define_method にブロックを渡して定義されたメソッドの call/return のイベントが通常のメソッドの call/returnの指定があった時に自動的に連携して有効になるようにして、ブロックの call/return イベントとメソッドの call/return 両方が発火するようにしています。 [ruby-core:80515] [Bug #13392]

[e387458da9] Hiroshi SHIBATA 2021-12-01 10:13:36 UTC

lib/bundler/vendor/.document を追加して bundler に vendoring されたライブラリのドキュメント化を抑制するようにしています。

[fe1725236c] Jeremy Evans 2021-12-01 21:00:11 UTC

Integer#times の実装で整数のインクリメントと上限との比較に、インデックスが FIXNUM の範囲を超えた時に rb_funcall() を使ってメソッド呼び出しをしていたのを int_le() や rb_int_plus() といった関数を直接呼び出すようにしています。FIXNUM の時にメソッドを読んでないのでメソッド再定義の影響を受けないのでそれと揃えるためということのようです。 [ruby-core:106361] [Bug #18377]

[a7d0c2c448] Nobuyoshi Nakada 2021-12-02 03:20:53 UTC

defs/gmake.mk で revision.h が存在してない時に生成させるために REVISION_LATEST の更新が必要であるということを指示するように変数の設定をするようにしています。

[6721ce1cc4] Yuta Saito 2021-12-02 04:20:13 UTC

gc.c の GC 処理時間のカウントのための struct timespec の tv_nsec メンバーへの代入に明示的なキャストを追加しています。警告抑制のため?

[3f74eaa7a8] schneems 2021-11-07 19:57:24 UTC

拡張ライブラリ ripper の Ripper::Lexer::State や Ripper::Lexer::Elem を Struct を使って定義していたのを class 文で通常の Class として定義するようにしています。高速化のためみたいです。

[3685b5af95] schneems 2021-11-08 02:30:50 UTC

拡張ライブラリ ripper の Ripper::Lexer#on_heredoc_dedent で @buf の最後の要素が Elem のインスタンスの場合がありえるので、配列の時だけその内容を each_with_index で舐めてインデント除去の処理をするように条件分岐を追加しています。

[2b22c93533] schneems 2021-11-08 01:33:04 UTC

標準添付ライブラリ irb の RubyLex で Ripper::Lexer::Elem の属性へのアクセスを "[]" メソッドでオフセットでアクセスしてるところを名前で参照するように変更しています。Struct の機能を使ってたみたいですが名前にしたほうが高速なんだそうです。

[8944009be7] schneems 2021-11-11 14:59:29 UTC

拡張ライブラリ ripper の Ripper::Lexer::Elem や State の "[]" メソッドを警告を出力するようにしています。

[fe506d7945] Nobuyoshi Nakada 2021-12-02 07:07:17 UTC

win32/Makefile.sub の config.status のコマンドに exit を書いてたのを消しています。

[2a15b28a9e] David Rodríguez 2021-11-30 17:03:14 UTC

bundler の依存関係解決でバージョンの指定がない時(">= 0" 相当になるらしい)に pre-release 版も含めるようにしています。

[cf88271331] David Rodríguez 2021-11-30 17:07:32 UTC

2a15b28a9ec59d41fc3f9a5e17cf3efe6d0817b6 の追加修正で bundler の依存関係解決時に明示的なバージョン制約がない時の requirement を Gem::Requirement.default_prerelease から ">= 0.A" に変更しています。default_prerelease は '>= 0.a' らしいので大文字にしているだけみたいですが A のほうが a よりコードポイント的に前だからかな。

[39f2b4f1a4] David Rodríguez 2021-11-30 17:12:54 UTC

lib/bundler/lazy_specification.rb に 2a15b28a9ec59d41fc3f9a5e17cf3efe6d0817b6cf882713312576a827abff8ddf7eb620e1f3f6d8 で修正した内容についてコメントを残しています。 default_requirement のほうを ">= 0.A" にしたら、というのはさっきも思ったのですが、どこかで互換性の影響があるかもしれないのでここだけ固定で書くようにしてるということも書き残しています。

[524a808d23] Nobuyoshi Nakada 2021-12-02 09:29:45 UTC

3f74eaa7a83e42b31c219a534ec5330e511d2921 で Struct による Class から class 文で定義するように変更された Ripper::Lexer::Elem に to_s を inspect への alias として定義を追加しています。