ruby-trunk-changes 2021-01-22

今日は Ractor.yield で move: true を使った時のオブジェクトの扱いの修正や標準添付ライブラリ matrix の新メソッド追加などがありました。

[d961f14df3] Nobuyoshi Nakada 2021-01-15 01:54:42 UTC

標準添付ライブラリ net/http のテストで MJIT が有効かどうかの判定に RubyVM::JIT を参照するようにしてましたが、古い ruby だとまだ RubyVM::MJIT のままなのでそちらのチェックも残すようにしています。そうか default gems になってるライブラリだと定数名両方に対応しないといけないのか。

[03d1850bfa] Koichi Sasada 2021-01-21 17:48:31 UTC

ractor.c の ractor_sleep_interrupt() 内の処理を ractor_wakeup() を使いまわすようにリファクタリングしています。

[a3efbda712] git 2021-01-21 17:49:39 UTC

version.h の日付更新

[0130e17a41] Aaron Patterson 2021-01-21 17:52:56 UTC

オブジェクトの compaction の処理中にオブジェクトの領域を protect して参照されたらシグナルが発生するようにする処理を GC.compact が明示的に呼ばれた時には無効にしていましたが、GC.compact 中にもこの read barrier が必要になるケースがあったとのことで常に有効にするようにしています。

[e34f51fe60] Felix Wolfsteller 2020-12-21 17:28:55 UTC

標準添付ライブラリ matrix に Matrix#rotate_entries という、その名のとおり行列を時計回りに90度回転させるように入れ替えた Matrix を返すメソッドを追加しています。引数で :clockwise, :half_turn (180度回転), :counter_clockwise で向きの指定もできるようです。

[871b4612b0] Gannon McGibbon 2021-01-20 22:52:38 UTC

標準添付ライブラリ matrix の rdoc 用コメントの "if and only if" (たぶん iff から置換したやつ)をそもそも使わないように文章を書き換えています。なるほどね。

[32b7dcfb56] Aaron Patterson 2021-01-21 19:19:44 UTC

0130e17a410d60a10e7041ce98748b8de6946971GC.compact 中かどうかで処理を分けるのをやめる変更の続きで lock_page_body() および unlock_page_body() でも同様にメモリ領域に protect をかける処理が明示的な GC.compact では実行されないようになってるままだったのでチェックを削除しています。

[fb33ec0119] aycabta 2021-01-20 07:11:32 UTC

irb の lib/irb/ruby-lex.rb 内のコメントアウトされてたコードとコメントを削除しています。

[d0d6227a0d] Koichi Sasada 2021-01-21 17:51:53 UTC

ractor_select() の引数 alen を rs_len と改名して変数 alen は yielded_value に値が渡されてたら +1 した数値を格納しておくリファクタリング。変数名の内容が意味と一致するようにするためのリファクタリングかなぁ。restart ラベルの位置を変更しているところは処理が変わりそうですが元々冗長な actions の ractor_select_action_yield 用のスロットを埋める処理を飛ばすためで副作用はなさそう?

[fff1edf23b] Koichi Sasada 2021-01-21 19:38:50 UTC

Ractor.yield のキーワード引数 move で Ractor 間で所有権(っていう名前なのかな)を移動させて渡す場合に、なんらかの理由で渡されなかった場合にそのオブジェクトが既に移動済みの状態になってしまって元の Ractor から触れなくなってしまっていたみたいなので、Ractor 間の通信用の basket に wait_moving という状態を追加して元に戻せるようにしているようです。しかし失敗したかどうか元の Ractor でわかるのかな。まあ触ってみて例外がおきるかどうかをみればわかるか。

[887a1bfbbc] Kenta Murata 2021-01-09 08:31:23 UTC

拡張ライブラリ bigdecimal の rb_big_convert_to_BigDecimal() で T_BIGNUM のオブジェクトからの変換で GetVpValue() を呼んでたのを rb_big2str() で文字列化して VpCreateRbObject() を呼ぶようにリファクタリングいています。

[a1bb110b56] Kenta Murata 2021-01-14 21:57:30 UTC

拡張ライブラリ bigdecimalBigDecimal_div2() という関数のコメント(直接メソッド定義に使われてはないので rdoc でメソッドのドキュメントになるものではないですが)で引数 n の値によって変わる挙動についてコメントを追加しています。

[e586345b77] Koichi Sasada 2021-01-22 09:14:36 UTC

RGenGC 用の write barrier をセットする rb_gc_writebarrier() で is_incremental_marking() が真なので gc_writebarrier_incremental() を呼ぼうと VM のロックを確保した後でもう一度 is_incremental_marking() をチェックして偽になってたらロック解放して最初からリトライするようにしています。

[899b950647] Nobuyoshi Nakada 2021-01-22 09:28:22 UTC

make clean-extout で拡張ライブラリに添付される .rb ファイルをあつめる .ext/common ディレクトリも削除対象に追加しています。

[c8121b2e3d] Nobuyoshi Nakada 2021-01-22 09:29:26 UTC

configure で aarch64-darwin という環境で target_cpu を arm64 に変更するようにしています。 ARM 版 mac で cpu のアーキテクチャ指定の文字列に揺れがあるみたいですね。config.sub が aarch64 に変更してしまうとのこと。