ruby-trunk-changes 2021-11-15

今日は組み込みメソッドの ruby 実装から使える、省略可能引数の有無で分岐することで高速化するための Primitive.mandatory_only? メソッドの追加と利用などがありました。

[1ab6f2b4a2] Koichi Sasada 2021-11-15 01:18:20 UTC

builtin.h に rb_vm_lvar_exposed() の宣言に PUREFUNC() を使って pure function だと宣言するようにしています。

[e6bc0acc13] git 2021-11-15 04:11:53 UTC

version.h の日付更新

[a698181021] Yusuke Endoh 2021-11-15 05:13:20 UTC

test/ruby/test_m17n.rb のテストで Encoding.default_internal を一時的に変更しているのが 3aa62b455caf4926fd203878eca71b5281f10edf などでデバッグしていたテストのエラーに影響していたみたいで assert_separately で子プロセスを作ってテストするようにしています。

[15bc1ae41e] Yusuke Endoh 2021-11-15 05:50:03 UTC

fc456adc6a62d09b755243b8c8f190934b9965d6 のドキュメントの変更を revert しています。コメントに非 ASCII 文字が入っていて CI が失敗したみたいです。

[f9638c3b17] Yusuke Endoh 2021-11-15 06:21:24 UTC

a698181021c11711dc56b74dacbdebc2895b5384 の子プロセスでテストする対応を revert しています。 macOS の CI でうまく動かなかったらしいです。

[b1b73936c1] Koichi Sasada 2021-11-12 17:12:20 UTC

組み込みメソッドを ruby 実装する時に使える特殊なメソッドに Primitive.mandatory_only? メソッドを追加して、省略可能な引数が指定されていないことを確認できるようにしています。 Time.at の実装においてキーワード引数を取る Primitive.arg! の呼び出しを抑制できるようにするためみたいです。しかもコミットログを読むとこの条件を使って分岐すると ISeq を別に作って呼び元の条件によって呼び分けて高速化を測っているようです。詳しいところは読んでないですが Time.at の高速化のためになんかすごいことをしてますね。 [Feature #16254]

[a24eeee556] Koichi Sasada 2021-11-12 17:15:09 UTC

Array#sample の ruby 実装でも b1b73936c15fd490159a9b30ab50b8d5dfea1264 で導入した Primitive.mandatory_only? を利用して引数のパターンで分岐するようにしています。

[dde010c974] Koichi Sasada 2021-11-15 01:32:39 UTC

Array#sample のベンチマークを追加しています。

[2a3d5d661c] Koichi Sasada 2021-11-12 22:44:46 UTC

b1b73936c15fd490159a9b30ab50b8d5dfea1264 で導入した Primitive.mandatory_only? を Time.at の ruby 実装で利用して分岐するようにしています。

[021255f1e7] Takashi Kokubun 2021-11-15 07:25:24 UTC

f943264565f3072a30616fa93ffa3da3790294b0 で追加した Time.at のベンチマークの prelude に magic comment の frozen_string_literal を追加しています。

[cc50e57bf5] Hiroshi SHIBATA 2021-11-15 07:51:03 UTC

tool/test-bundled-gems.rb の typeprof のテスト時に rbs がビルド済みかチェックするための共有ライブラリの拡張子を .so 決めうちにしていたのを RbConfig::CONFIG['DLEXT'] を利用するように修正しています。

[ccaa7957df] Hiroshi SHIBATA 2021-11-15 07:52:06 UTC

.gitignore に bundled gems のテスト時に作成される /ext/-test-/gems を追加しています。

[ca0a5edb5f] Yusuke Endoh 2021-11-15 07:52:12 UTC

a698181021c11711dc56b74dacbdebc2895b5384 および f9638c3b1716df4a94ea6ae0854cf55d66072ee4 で一度子プロセスで実行する対応を入れてすぐ revert した test/ruby/test_m17n.rb の Encoding.default_internal を変更するテストは、一時的に skip するようにしています。 [ruby-core:106067] [Bug #18338]