ruby-trunk-changes 2023-03-12

今日は主に組み込みメソッドの ruby 実装で使う Primitive.attr! の実装と引数の名前の変更や RJIT の実装の整理などがありました。

[0c0c88d383] Takashi Kokubun 2023-03-11 21:32:58 UTC

組み込みメソッドの ruby 実装で使う Primitive.attr! メソッドの実装を引数の Symbol の内容をみてフラグを設定するようにちゃんと実装しています。これまではこのメソッド :inline (先日までは文字列で "inline")しか受付けないからって引数をちゃんとチェックせずに struct rb_iseq_constant_body::builtin_inline_p フラグを立てる実装にしていましたが、この構造体メンバーも削除してかわりにビットフラグで属性を持つ builtin_attrs というメンバーを追加しています。まだ実際には inline 以外の属性はないみたいですが。

[94da5f7c36] Takashi Kokubun 2023-03-11 22:25:11 UTC

0c0c88d383a09fef18d8cf8a1457d1649a2cbd46 の続きで組み込みメソッドの ruby 実装で使う Primitive.attr! の inline 属性を leaf 属性に改名しています。そういえば昔は leaf っていう名前だったような気も。

variable.c の find_cvar() という関数の実装を CVAR_LOOKUP() というマクロを再利用して書き直しています。

[c6bea54c70] Takashi Kokubun 2023-03-12 04:41:24 UTC

RJIT で USE_LAZY_LOAD というマクロの定義の有無をチェックする機能? を削除しています。取り込んではいるけど実際に挙動に変更はなかったみたいですね。

[46a3634bcf] Takashi Kokubun 2023-03-12 04:46:58 UTC

RJIT で Object Shapes の情報を取得するメソッドで整数の変換に利用するマクロを PTR2NUM() から SIZET2NUM() に修正しています。

[195e32977f] Takashi Kokubun 2023-03-12 04:51:48 UTC

拡張ライブラリ socket の UDPSocket のテストが s390x の環境で失敗しているのでスキップするようにしています。

[4445b9e2a2] Takashi Kokubun 2023-03-12 04:53:58 UTC

RJIT のテストで RJIT がサポートされている環境か判定するメソッド群がもう不要とのことで削除しています。

[e4caf59cc1] Takashi Kokubun 2023-03-12 04:59:02 UTC

テスト用に RJIT や YJIT がサポートされているかどうか判定する処理を test/lib/jit_support.rb にまとめています。

[2570374bc8] Hiroshi SHIBATA 2023-03-12 05:00:00 UTC

GitHub Actions で利用している ruby/action-slack アクションのバージョンを更新しています。たまに dependabot による更新は更新漏れがあるようなのでそれを追加で更新しているみたいです。 https://github.com/ruby/ruby/pull/7505

[47a6cfca72] Takashi Kokubun 2023-03-12 05:02:06 UTC

RJIT 用の C binding で C の定数を ruby の Integer に変換するのに使うマクロを修正しています。主に UINT2NUM() を SIZET2NUM() に変更するのと INT2NUM() を LONG2NUM() に変更しています。

[58f7e8b7f8] Takashi Kokubun 2023-03-12 05:10:44 UTC

RJIT 用の C Binding の生成するツール tool/rjit/bindgen.rb でいくつかの C の関数の wrapper を Promitive.cexpr! を使った ruby 実装を自動生成するようにしています。

[50c5f94ed7] Takashi Kokubun 2023-03-12 05:31:18 UTC

RJIT の C Binding で生成する C の定数に対応する定数を RubyVM::RJIT::C の特異メソッドとして定義していたのを定数として定義するように変更しています。

[fe34db5a1b] Takashi Kokubun 2023-03-12 05:54:09 UTC

同じく RJIT で利用する定数を RubyVM::RJIT::C の特異メソッドとしてではなく定数として定義するようにしています。

[846fc356cb] Takashi Kokubun 2023-03-12 06:13:57 UTC

RJIT 用のコード生成に pattern match 文法を利用するようにしています。ということは BASERUBY が pattern match が使えるバージョンが必要になるってことかな。

[9501283dea] Takashi Kokubun 2023-03-12 06:24:37 UTC

RJIT の RubyVM::RJIT::Assembler の定義で case 文の else 節を削除して NotImplementedError を raise しなおしていたのを pattern match の NoMatchingPatternError 例外をそのまま上げるようにしています。

[8835f9d3bf] Takashi Kokubun 2023-03-12 06:30:53 UTC

RubyVM::RJIT::Assembler で Array クラスを直接参照していたのを QwordPtr という定数を使うようにしています。 QwordPtr には Array を代入しているので実態は同じですが意味を明確にするためみたいです。

[9c220bf5e1] Takashi Kokubun 2023-03-12 06:46:35 UTC

RubyVM::RJIT::Assembler の実装で pattern match のパターンとして Symbol クラスを使っていたのを Proc オブジェクトを作ってこれを使うようにしています。なるほどこうすると Proc オブジェクトが真を返す時にマッチするから後置 if でのチェックを Proc の中に入れられるということか。

[3efe4639ec] Takashi Kokubun 2023-03-12 07:47:10 UTC

RJIT の JIT コンパイル時に cmp 命令にレジスタのアドレスにオフセットをつけて参照する命令への対応を追加しているようです。

[d50d136499] Takashi Kokubun 2023-03-12 07:51:15 UTC

GitHub Actions の MinGW 環境の workflow でデバッグ用にテスト実行時に -v --tty=no オプションをつけるようにしています。

[c9db9c8abd] Takashi Kokubun 2023-03-12 07:52:20 UTC

GitHub Actions で使う ruby/action-slack アクションのバージョンを 3.1.0 および 3.1.1 に更新したのを revert して 3.0.0 に戻しています。

[781222a8bc] Nobuyoshi Nakada 2023-03-12 09:40:41 UTC

tool/lib/core_assertions.rb で定義されているテスト用の assertion メソッドで assert_join_threads で Exception#full_message が未定義の場合の考慮の追加と assert_no_memory_leak で MJIT が有効な時に skip する処理を追加。RubyVM::MJIT を使っているので master だと RUbyVM::RJIT が定義されていないかのチェックも必要? それとも RJIT だと問題がないのかも。 tool/lib/core_assertions.rb は default gems のテストでも利用されるため古い ruby でも動く必要があるため。