ruby-trunk-changes 2020-07-06

今日は拡張ライブラリ bigdecimal の更新や Struct のメンバー参照メソッドの JIT 向け最適化(メンバー数が多い時のみ)などがありました。

[6236bbf363] Nobuyoshi Nakada 2020-07-05 12:59:22 UTC

拡張ライブラリ bigdecimal のテスト test/bigdecimal/test_bigdecimal.rb で重複したテスト内容があったようで一方を削っています。

[41fef191d1] Nobuyoshi Nakada 2020-07-05 13:08:04 UTC

tool/sync_default_gems.rb に対象の default gem として bigdecimal を追加しています。

[988b4bc9ea] git 2020-07-05 15:28:53 UTC

version.h の日付更新

[8e189df32c] manga_osyo 2020-07-05 11:58:55 UTC

RubyVM::AbstractSzyntaxTree.of で OP_ASGN2 ノードの子要素がひとつ足りてなかった不具合を修正しています。 "+=" みたいな演算子つき代入の syntax sugar に対応したノードですね。

[1aed23c18d] Nobuyoshi Nakada 2020-07-05 15:33:03 UTC

tool/sync_default_gems.rb の commit hash の範囲指定による cherry pick 指示に複数の範囲を同時に指定できるように機能拡張しています。

[d69510b6cd] Nobuyoshi Nakada 2020-07-05 16:14:42 UTC

ext/bigdecimal/util/depend が dd0c75fdc2104a6ba38b68d4431a572504a3bbc2 移行不要になってたので削除しています。

[ceb9d516c6] Jeremy Evans 2019-10-08 22:23:46 UTC

拡張ライブラリ bigdecimalBigDecimal#initialize_copy, #initialize_dup, #initialize_clone などのメソッドを undef しています。 initialized_copy は明示的にメソッド定義してしまっていたのでそれを消してますが、initialize_dup/initialize_clone っていうメソッドを呼ぶ内部的な挙動ってあるんでしたっけ? dup/clone の時にこの名前のメソッドがあれば優先的に呼ぶんでしたっけ。どうやらそうみたいだ……。

[f00efef30a] Kenta Murata 2019-10-09 01:27:08 UTC

拡張ライブラリ bigdecimal の Kernel#BigDecimal() の引数に Complex を渡された時に虚数部(img)が 0 であれば対応するようにしています。

[d36b197d7c] Jeremy Evans 2019-10-08 22:23:46 UTC

ceb9d516c6d17b0619cf53dfba7cb7b29fe073e4 で追加した BigDecimal#initialize_{copy,dup,clone} の明示的な undef を削除しています。 BigDecimalインスタンスは freeze されてるので Kernel から継承(Mix-in)したメソッドで FrozenError が発生するのでそれにまかせています。

[6607212224] Jeremy Evans 2019-10-09 21:10:04 UTC

d36b197d7c1ce5684fb215697dc2d404cbd730d0 で修正した bigdecimal のテストで 2.4 以前だと freeze されたオブジェクトの変更は FrozenError ではなくただの RuntimeError だったのでそれにも対応するようにしています。

[03a33603c6] Kenta Murata 2019-10-09 01:39:39 UTC

拡張ライブラリ bigdecimal で Complex#to_d メソッドも追加しています。Kernel#BigDecimal() と同様に虚数部が 0 なら変換するようにしています。

[40b82afe6a] Kenta Murata 2019-10-09 01:50:59 UTC

拡張ライブラリ bigdecimal で 2.5 以前の ruby に対応するため rb_complex_real() と rb_complex_imag() の代替実装を追加しています。そういえば struct RComplex 構造体を不可視にするという変更がすこし前にありましたね。

[e794d96ca4] Kenta Murata 2019-10-09 01:51:25 UTC

拡張ライブラリ bigdecimal の gemspec ファイルで対応する ruby バージョンを 2.4 以降に更新しています。

[6a826eb4b0] Kenta Murata 2019-12-23 02:07:23 UTC

拡張ライブラリ bigdecimalBigDecimal#to_s が返す文字列の Encodig を常に US-ASCII にするようにしています。なんでかなと思ったら "ASCII-8BIT" になってしまう場合があったようです。 https://github.com/ruby/bigdecimal/issues/159

[efe851a0df] Kenta Murata 2019-12-25 06:26:23 UTC

拡張ライブラリ bigdecimal の gemspec ファイルでのバージョンを 2.0.1 に更新しています。

[d94ef7c6b6] Nobuyoshi Nakada 2020-07-06 01:46:57 UTC

関数 method_missing() 内で GET_EC() で rb_execution_context_t を得てたのを引数で受け取るようにして呼び元の ec を渡すようにしています。おそらく呼び元の ec も同じものではあると思いますが。

[167d139487] Takashi Kokubun 2020-07-06 07:11:51 UTC

Struct のインスタンスである構造体クラスにメンバー名のメソッドを定義する define_aref_method() (ただし最初の 10個までは専用の関数を使ってメソッド定義するので、それ以上のメンバーをもつ時だけ使われる)で利用する builtin 関数呼び出しの ISeq のフラグ builtin_inline_p に true をセットして MJIT でスタックフレーム省略させるようにしています。