ruby-trunk-changes 2020-12-12

今日は main Ractor 以外で Kernel#trap などで Proc オブジェクトをシグナルハンドラとして渡す時に外部スコープへの参照があったらエラーにするようにする変更などがありました。

[68d3952c52] ima1zumi 2020-12-11 13:18:36 UTC

標準添付ライブラリ reline で絵文字を複数の要素を繋げて作る時に使う zero width joiner の扱いを修正しています。家族の絵文字とか作る時に使うやつですね。

[eea756ac86] Nobuyoshi Nakada 2020-12-11 14:14:36 UTC

fiddle と reline のテストの行末の空白除去。

[abbc43413c] Kazuhiro NISHIYAMA 2020-12-11 15:28:08 UTC

NEWS から不要になったチケット参照用の footnote を削除しています。

[e795b63246] git 2020-12-11 15:29:02 UTC

version.h の日付更新

[31e8de2920] "nicholas a. evans" 2020-11-18 00:23:51 UTC

Fiber#raise を Fiber#transfer で起動されている Fiber でも受け付けるようにしています。 https://github.com/ruby/ruby/pull/3795

[d741c77b5f] Koichi Sasada 2020-12-11 07:37:20 UTC

Ractor 間で共有可能にマークされたオブジェクトのインスタンス変数へのアクセスは main ractor でのみできるように制限していて、これを vm_getivar() でもチェックするように? しているのかな? 変更内容は vm_getivar() から fill_ivar_cache() や rb_ivar_generic_lookup_with_index() を切り出してるリファクタリングだけみたいで。ちょっとよくわかりませんでした。 shareable ってことは参照先も含めて freeze されてるんじゃないかと思ったのですが、条件分岐みると !RB_OBJ_FROZEN_RAW() と rb_ractor_shareable_p() が同時に含まれてるので違うのかな。

[124321e0c7] Koichi Sasada 2020-12-11 21:29:11 UTC

b53ccb9c69abd24e3bdad66cbe4c7e7480eaef16 で Kernel#lambda にブロックが明示的に渡されてない時の警告の修正がありましたが、Symbol を &:sym のようにブロック引数として渡した時の警告の判定が間違ってて警告が出てたのを再修正しています。

[70a311fdeb] Koichi Sasada 2020-12-11 21:54:46 UTC

Kernel#trap や Signal.trap はシグナルハンドラとしてブロックやProc オブジェクトを受け取るので、main Ractor 以外で呼ばれると起動時に Ractor 間での不正なオブジェクト参照になってしまうので、rb_proc_isolate() で外部スコープの変数の参照を消しておく(あったら trap 呼び出し時点で例外が発生する)ようにしています。

[4e5156621e] Nobuyoshi Nakada 2020-12-12 02:44:25 UTC

Process::Status.wait の rdoc 用コメントに子プロセスがいない状態で呼ぶと SystemCallError が発生すると書いてあったのを実装にあわせて nil を返すと記述を更新しています。

[3e23991345] Takashi Kokubun 2020-12-12 03:58:45 UTC

MJIT の worker で struct rb_mjit_unit_list のリストから優先度の高い unit を取り出す get_from_list() というユーティリティ関数で GC 中だったら GC 完了するまで待つようにしています。

[52bca75cde] S-H-GAMELINKS 2020-12-11 05:20:43 UTC

numeric.c から不要になってた事前 prototype 宣言を削除しています。

[68af523529] Nobuyoshi Nakada 2020-12-12 05:22:59 UTC

GCC 11 で警告されるとのことで include/ruby/internal/core/rbasic.h のマクロ RBIMPL_EMBED_LEN_MAX_OF() の定義にかっこを追加しています。 [ruby-core:101381] [Bug #17385]

[e53c0bc906] Takashi Kokubun 2020-12-12 06:52:15 UTC

GitHub Actions の MJIT 用テストの workflow のデバッグのため環境変数 RUN_OPTS に --jit-save-temps --jit-debug=-ggdb3 を追加しています。

[21c5726418] Nobuyoshi Nakada 2020-12-12 07:01:10 UTC

現在 CRuby のビルドには C99 が必要ということになってるので、configure で不要な機能チェックを削っています。

[0df67a4695] Nobuyoshi Nakada 2020-12-12 07:06:19 UTC

sigaction() や posix_signal() に渡す関数ポインタの戻り値を RETSIGTYPE というマクロで定義してましたが、常に void なのでマクロ定義は削除して直接 void を書くようにしています。

[4d2ad8d737] Nobuyoshi Nakada 2020-12-12 08:20:58 UTC

configure.ac で AC_STRUCT_ST_BLKSIZE、AC_STRUCT_ST_BLOCKS、AC_STRUCT_ST_RDEV といった struct stat のメンバーの有無をチェックする専用のコマンド? を使っていたのは obsolete になったとのことで AC_CHECK_MEMBERS() を使って明示的にメンバー名を指定してチェックするようにしています。