ruby-trunk-changes 2021-12-19

今日は IO::Buffer の #resize の引数削減や #null? や #transfer といったメソッドの新規追加や RubyVM::AbstractSyntaxTree.of の不具合修正などがありました。

[45de4025f5] Koichi Sasada 2021-12-18 16:05:17 UTC

rubyspec の ruby -v オプションのテストを YJIT が有効な時にスキップするようにしていたのを MJIT が有効な時にもスキップするように条件に追加しています。

[1ed520a9ef] git 2021-12-18 16:07:23 UTC

version.h の日付更新

[7e0e6f9074] Burdette Lamar 2021-12-18 18:32:11 UTC

ENV の rdoc 用コメントにメソッド一覧を追加しています。 https://github.com/ruby/ruby/pull/5292

[acac2b8128] Yusuke Endoh 2021-12-18 18:40:44 UTC

RubyVM::AbstractSyntaxTree.of メソッドで返す AST の Node を求める時にスクリプトの位置情報から特定した ISeq から辿るように修正しています。詳細はわかりませんが eval で実行されたコード内でのエラーを error_highlight で処理する時に不具合が発生していたようです。

[6a51c3e80c] Yusuke Endoh 2021-12-18 19:00:51 UTC

RubyVM.keep_script_lines に true が設定されていた時には eval で定義されたメソッドを RubyVM::AbstractSyntaxTree.of に渡しても ArgumentError が発生しないようにエラーチェックを緩めています。

[52b1c76534] Yusuke Endoh 2021-12-18 19:13:14 UTC

標準添付ライブラリ error_highlight の例外をまとめて 1つの rescue 節で補足していたのを例外クラス毎に別の rescue 節を書くようにしています。

[89a02d8932] Koichi Sasada 2021-12-18 18:20:00 UTC

rb_iseq_type() という C API を追加して rb_iseq_t::body::type を Symbol 化したオブジェクトを返すようにしています。

[dd29ba0764] Koichi Sasada 2021-12-18 20:35:16 UTC

89a02d8932774f740013fe2a829faa9c40a1cfd1 の rb_iseq_type() のために追加した static 関数の iseq_type_sym() は iseq_type_id() と改名してこの関数の時点では Symbol (VALUE) ではなく ID を返すようにしています。

[45f2182438] Daniel Colson 2021-12-17 00:52:44 UTC

YJIT が VM 命令の intern に対応してコード生成するようにしています。

[6bef1ac628] Koichi Sasada 2021-12-18 21:15:22 UTC

iseq.c の rb_iseq_update_references() で GC.compact の対応のため参照の更新をしているところで rb_iseq_constant_body::variable::script_line の対応が漏れていたのを修正しています。これは 3.0 でも必要かな?

[f3e30b26c5] Samuel Williams 2021-12-18 20:56:52 UTC

blocking fiber 対応のための IO::Buffer の実装で IO::Buffer::DEFAULT_SIZE 定数を追加し、IO::Buffer.new の引数を省略可能にして省略時のデフォルトのバッファサイズとして用いるようにしています。またこの定数は環境変数 RUBY_IO_BUFFER_DEFAULT_SIZE で起動時に設定可能にしています。環境変数は起動時にしか参照しないので起動後に変更しても影響しないのは注意が必要です。

[7159af3491] aycabta 2021-12-16 01:19:52 UTC

標準添付ライブラリ reline の Reline::LineEditor#render_each_dialog で、入力がスリップボードからの入力と判定されている時にはダイアログ描画を抑制するだけでなく既存のダイアログもクリアするようにしています。

[a81e0600a7] Nobuyoshi Nakada 2021-12-15 13:43:45 UTC

標準添付ライブラリ reline の gemspec ファイルでバージョンを取得するための require を require_relative を利用するようにしています。upstream と ruby の標準添付ライブラリとして配置された時の違いがうまく吸収できていなかったのを修正しているようです。

[56811617ab] Samuel Williams 2021-12-19 04:05:57 UTC

IO::Buffer#resize メソッドの第2引数 preserve を削除し、関連して C API の rb_io_buffer_resize() の引数の preserve も削除しています。さらに IO::Buffer#null? というメソッドを追加してバッファのポインタが存在するかどうかのチェックができるようにしているのと、IO::Buffer#transfer というメソッドを新設して、バッファの内容を新しく確保した IO::Buffer のインスタンスに移動するようにしています。 ownership の移行のためのメソッドみたいですが、これは Ractor 間での移動のためということかな? 新設されたメソッドについてのテストがないのでどういう用途なのかちょっとよくわからず。またこれに関連して Scheduler 関連の C API rb_fiber_scheduler_io_read_memory() や rb_fiber_scheduler_io_write_memory() で IO::Buffer の解放前に rb_io_buffer_unlock() を呼ぶようにしています。

[0eb1c4ea3a] Kaíque Kandy Koga 2021-12-15 22:13:40 UTC

irb の rdoc 用コメントに --extra-doc-dir オプションについて追記しています。

[e2ec97c4b8] Nobuyoshi Nakada 2021-12-19 11:12:26 UTC

String#rindex と String#rpartition の rdoc 用コメントに、引数に正規表現を渡した時の最長マッチは右側から探索した場合は最初にマッチしたところで探索が止まってしまうので否定後読みなどを使う必要があるということを追記しています。 [ruby-core:106728] [Bug #18415]