ruby-trunk-changes 2021-07-23

今日は finalizer の処理内での例外を警告出力するようにする変更や irb の字句解析の不具合修正などがありました。

[018f3961ae] Peter Zhu 2021-07-22 13:19:04 UTC

gc.c の finalize_list() の中で引数 zombie のオブジェクトの struct RBasic::flags を 0 にクリアしていたのをやめています。この後で呼んでいる obj_free_object_id() の中でもクリアされているので冗長だからみたいです。

[62661dd9e4] Peter Zhu 2021-07-22 13:28:05 UTC

同じく gc.c の finalize_list() で heap_page_add_freeobj() の引数に渡すためのオブジェクトの slot が所属している page を GET_HEAP_PAGE() で取得していたのを既に変数に格納済みのものを使いまわすようにリファクタリングしています。

[86e0eecc84] manga_osyo 2021-07-20 13:25:32 UTC

irb の字句解析器 IRB::RubyLex で :1 のように数字が後続する Symbol リテラルを許容するようにしているようです。が、数字だけの Symbol リテラルってありでしたっけ? 試してみたら SyntaxError になったけど。
と、思ったけど https://github.com/ruby/irb/issues/256 をみると irb で parse が終わらないために評価が始まらなくてそもそも SyntaxError にすらできないという不具合の修正みたいです。

[fc78a08904] git 2021-07-22 18:13:31 UTC

version.h の日付更新

[4da07ac2f3] Nobuyoshi Nakada 2021-07-22 14:21:28 UTC

finalizer の定義時に $SAFE の safe level を保存しておいて実行時に適用するための機構がまだ残っていたのを消しているようです。

[b726c4ee38] Nobuyoshi Nakada 2021-07-22 14:46:03 UTC

ObjectSpace.define_finalizer の実装で同じ finalizer を登録しないようにするチェックで rb_funcall() を利用していたのを直接 rb_equal() を呼ぶようにしています。

[63e5f4df38] Nobuyoshi Nakada 2021-07-22 15:31:20 UTC

gc.c の run_finalizer() で rb_execution_context_t::errinfo の操作に rb_set_errinfo() と rb_errinfo() という API を利用していたのを、ここで扱う ec を変数として持っているので直接構造体のメンバーにアクセスするように変更しています。毎回 GET_EC() するのが無駄だからかな?

[fc4dd45d01] Nobuyoshi Nakada 2021-07-22 15:32:09 UTC

finalizer の処理内で例外が発生した時に警告メッセージを出力するようにしています。 [ruby-dev:51050] [Feature #17798]

[377995035a] Nobuyoshi Nakada 2021-07-22 15:44:19 UTC

fc4dd45d0142221880d1b2c9b54dee0597be2b78 で finalizer 内の例外メッセージを警告出力するようにしましたが $VERBOSE が nil 以外に設定されていた時(-w や -W1 以上のコマンドラインオプションが渡されてた時)のみ出力するようにしています。また GC のテストで警告が出る場合があるものがあったので EnvUtil.suppress_warning で抑制するようにしています。 [ruby-dev:51050] [Feature #17798]

[5385731374] Nobuyoshi Nakada 2021-07-23 03:41:01 UTC

NEWS のリンク用の footer の記述を整形しています。

[8cc18703cf] Nobuyoshi Nakada 2021-07-23 03:41:34 UTC

fc4dd45d0142221880d1b2c9b54dee0597be2b78 の finalizer での例外の警告出力について NEWS に追記しています。 [ruby-dev:51050] [Feature #17798]