ruby-trunk-changes 2019-08-02

今日は主に attr_xxx 系メソッドが定義するメソッドが private になる条件の修正や rational.c の関数群のメソッド呼び出しを回避する最適化などがありました。

[b8e351a1b9] Yusuke Endoh 2019-08-01 12:09:59 UTC

Solaris 上の Sun C でビルドエラーになったとのことで 5d33f787169bcc3594d2264726695d58c4a06899 で追加したテスト用の拡張ライブラリに MAYBE_UNUSED() の fallback 定義を追加しています。

[ef45a57801] Jeremy Evans 2019-08-01 00:03:11 UTC

attr_reader や attr_writer などの attr 系メソッドで呼び元がクラス内でない時(klass.send(:attr_reader) のように呼んだ時など)に定義されるメソッドが private になるというのを修正しています。 [Bug #4537]

[8ba8ccc3cc] git 2019-08-01 15:55:03 UTC

version.h の日付更新

[6de61fb9ed] Nobuyoshi Nakada 2019-08-02 02:19:29 UTC

rational.c の f_mod() を binop() マクロで定義していたのを展開して引数が Integer だった時の最適化を追加しています。

[ffe4a6ebf9] Nobuyoshi Nakada 2019-08-02 02:22:56 UTC

rational.c の f_integer_p() をマクロ fun1() を使って定義していたのを展開して RB_INTEGER_TYPE_P() を利用するように最適化しています。

[f9a0492b76] Nobuyoshi Nakada 2019-08-02 02:25:41 UTC

rational.c の f_ceil() も rb_funcall() を呼び出すようにマクロ定義されていたのを関数として定義して引数が Integer や Float だった時にメソッド呼び出しを経由しないように最適化しています。またここで使うために flo_ceil() から rb_float_ceil() という関数を切り出しています。

[19006b711d] Nobuyoshi Nakada 2019-08-02 02:28:24 UTC

rational.c の f_quo() も rb_funcall() を使ってメソッド呼び出しするマクロ定義による実装から関数定義にして引数が Integer, Float の時の最適化を追加しています。

[a0980f2446] Yusuke Endoh 2019-08-02 06:03:34 UTC

9faef3113fb4331524b81ba73005ba13fa0ef6c6 の nil? メソッドのための最適化命令 opt_nil_p の追加を revert しています。 RubyCI の macOS で失敗するため。 関連した VM 命令網羅のためのテストは命令がなくても一応動くのでそのままみたいですね。

[e03b3b4ae0] Koichi Sasada 2019-08-02 05:59:29 UTC

obj_free() で Hash の要素数ごとのカウントを debug counters に追加しています。1〜4 個をまとめてカウントしていたのをそれぞれ別にカウントするようにしているようです。

[ee1334189b] Nobuyoshi Nakada 2019-08-02 08:51:45 UTC

MJIT 用の assertion メソッドの assert_compile_once に uplevel キーワード引数に追加して、そこから呼ぶ assert_eval_with_jit にそれを基準に +1 した値を渡すようにしています。また assert_eval_with_jit もデフォルト値を 1 に変更して、そこから +2 した値を Kernel#warn に渡すようにしています。

[6640eeb6db] Nobuyoshi Nakada 2019-08-02 09:11:05 UTC

rational.c で FLT_RADIX による preprocessor の分岐を大きくブロックごと分けてたのを違いのある行だけピンポイントに分岐するようにリファクタリングしています。

[9921b63ac4] Nobuyoshi Nakada 2019-08-02 10:04:38 UTC

rational.c の float_decode_internal() の指数部を返すための引数の型を VALUE* から int* に変更し余計な変換を抑制しています。