ruby-trunk-changes 2022-08-21

今日は主に MJIT の実装を fork(2) を利用する変更や bundler の不具合修正などがありました。

[dc8d70e461] Takashi Kokubun 2022-08-20 23:33:03 UTC

MJIT のコンパイラを起動する処理を別プロセスに分けるように変更しているようです。チケットをみると MJIT 実装を ruby で書くようにするために以前は native thread を使っていたのを Ractor を使うようになっていました。しかし multi Ractor モードにするとパフォーマンスへの影響があるとのことでシンプルに子プロセスを fork してそこで MJIT の処理をするようにしているようです。このため fork(2) が使えない Windows 環境では MJIT のサポートを止めるみたいです。 https://github.com/ruby/ruby/pull/6264 [ruby-core:109585] [Misc #18968]

[e85db84959] git 2022-08-20 23:33:24 UTC

version.h の日付更新

[f6d4d73abd] Nobuyoshi Nakada 2022-08-21 05:04:52 UTC

dc8d70e4615cdf12378322fbcd4396486270ddbe の MJIT の実装の変更で fork(2) を直接呼ばずに rb_fork() を呼ぶようにしています。実体は fork() を呼んでるだけですがコンパイラ警告を抑制するための pragma つきで定義されています。

[b87ddd7538] David Rodríguez 2022-08-19 18:35:26 UTC

bundler の bundle platform で Gemfile.lock に ruby_version の指定がない時にエラーになってたのを修正しています。

[560941e711] David Rodríguez 2022-08-19 12:03:43 UTC

bundler の bundle package で no_install の設定の影響を受けないように修正しています。

[0cc989696e] Nobuyoshi Nakada 2021-06-30 21:38:33 UTC

Kernel#Float のテストに 0x ではじまる16進数の記法の小数点を含む数値を渡された時に ArgumentError になるケースの assertion を追加しています。

ruby-trunk-changes 2022-08-20

今日は主に Kernel#sprintf や String#% での "%c" 指示子の扱いの変更や Method の同値性チェックの挙動の変更(元に戻す)などがありました。

[4177f60eed] Kaíque Kandy Koga 2022-08-18 17:54:36 UTC

misc/lldb_rb/commands/command_template.py のコメントの typo 修正。

[ce384ef5a9] Nobuyoshi Nakada 2022-08-19 15:16:43 UTC

Kernel#sprintf や String#% のフォーマット指示子 %c でマルチバイト文字を埋め込む時に Encoding の判定を埋め込むほうの文字列のもので判定するように修正しています。 [ruby-core:109428] [Bug #18955]

[1ef49de834] Nobuyoshi Nakada 2022-08-19 16:04:02 UTC

ce384ef5a95b809f248e089c1608e60753dabe45 の続きで Kernel#sprintf や String#% のフォーマット指示子 %c に対応する文字列に複数の文字を含む文字列を渡しても例外にしないようにしています。 [ruby-core:109428] [Bug #18955]

[745de85a7e] git 2022-08-19 18:57:35 UTC

version.h の日付更新

[8f4a53d051] Takashi Kokubun 2022-08-19 21:45:51 UTC

fc4acf8cae82e5196186d3278d831f2438479d91 のインデント修正を git blame に無視させるために .git-blame-ignore-revs に追記しています。

[d2483393cb] Nobuyoshi Nakada 2022-08-19 16:43:04 UTC

Kernel#sprintf や String#% でフォーマット指示子 %c に対応する引数に負の整数を渡した時にオーバーフローした整数として扱ったメッセージを出してしまっていたので "invalid character" として ArgumentError 例外を発生させるようにしています。 [ruby-core:109429] [Bug #18956]

[43e8d9a050] Nobuyoshi Nakada 2022-08-19 14:39:52 UTC

string.c の rb_must_asciicompat() という ASCII 互換の Encoding をもつ文字列であることをチェックする関数で rb_enc_get() でそもそも Encoding が取れないという場合の例外発生を追加しています。そもそも String や Symbol じゃなかった時ということかな。

[1a2f99275b] Nobuyoshi Nakada 2022-08-19 14:53:33 UTC

Kernel#sprintf や String#% でフォーマット文字列が ASCII 非互換な Encoding の文字列だと例外を発生させるようにしています。あれ、これだめなのか。チケットをみると元々 UTF-16 などではちゃんと動いてなかったみたいですね。そうなのか。 [ruby-core:109431] [Bug #18958]

[6f3857f6a7] Jeremy Evans 2021-06-18 23:05:15 UTC

Encoding::Converter.new の newline キーワード引数および File.open の newline キーワード引数に :lf と :lf_newline という Symbol を受付けるように(というか無視されないように)しています。 [ruby-core:75767] [Bug #12436]

[01e8d393bc] nick evans 2022-04-03 13:54:18 UTC

.gdbinit の rp_class と rb_ps_vm コマンドを実装にあわせて修正しています。そういえば最近は lldb のほうが主にメンテされてて gdb のほうはあんまり変更がなかったような気がしますね。

object.c の rb_class_new_instance() という C API を rb_class_new_instance_kw() に委譲するように書き変えています。内容が完全に同じみたいですね。

[485019c2bd] Takashi Kokubun 2022-08-20 06:57:17 UTC

MJIT に関連した関数名や変数名などを mjit_exec() → jit_exec() のように m を削るよう改名しています。また mjit_exec_slowpath() は mjit_check_iseq() と改名しています。 https://github.com/ruby/ruby/pull/6262

[b32a3f1275] Nobuyoshi Nakada 2022-08-20 07:25:30 UTC

C API rb_econv_append() のための拡張ライブラリを利用したテストを追加しています。

[8212aab81a] Jeremy Evans 2021-12-27 17:39:15 UTC

method entry を検索する mnew_internal() で VM_METHOD_TYPE_ZSUPER タイプの method entry をスキップする処理を削除しています。そのかわり ZSUPER を無視したい場合用に zsuper_ref_method_def() という関数を新設して一部ではこちらを使うようにしています。 ff42e2359bdbf37e1721a82b4cfd95b31f494f3f で Method/UnboundMethod の private?/protected?/public? メソッドを削除してたのとも関係ありそうですが owner メソッドが誤った Class/Module を返すのを修正するものみたいです。 [ruby-core:106828] [Bug #18435] [ruby-core:108235] [Bug #18729]

[209631a45f] Benoit Daloze 2022-08-15 14:01:33 UTC

Method#== による同値性チェックが継承したメソッドの可視性のみ変更している時の method entry を別のものと判定するようになっていたのを同一視するように ZSUPER をスキップした method entry に解決してから比較するようにしています。 [ruby-core:106828] [Bug #18435] [ruby-core:108235] [Bug #18729] [ruby-core:108378] [Bug #18751]

ruby-trunk-changes 2022-08-19

今日は標準添付ライブラリに syntax_suggest を追加する変更などがありました。

[c53667691a] Nobuyoshi Nakada 2022-08-18 14:25:05 UTC

Regexp#match の rdoc 用コメントに offset 引数を byte 数でなく文字数での指定であるという記述の修正とサンプルの追加をしています。

[7c1ed47097] Nobuyoshi Nakada 2022-08-18 14:33:23 UTC

テスト用ライブラリ test/unit 自体のテストに assert_pattern_list という assertion メソッドのテストを追加しています。

[2652b0da6b] Nobuyoshi Nakada 2022-08-18 15:16:44 UTC

fe61cad7490da8a879597f851f4a89856d44838e で追加した Thread::SizedQueue#pop のテストの Thread#join での待ち時間を少し伸ばしています。また ensure 節で Thread leak を防ぐため kill した Thread の join を追加しています。

[8c44b07fa4] git 2022-08-18 15:17:06 UTC

version.h の日付更新

[d903e76726] Nobuyoshi Nakada 2022-08-18 14:42:53 UTC

テスト用ライブラリの assert_pattern_list という assertion メソッドの pattern_list 引数に文字列を受付けるようにしています。

[f1ccfa0c2c] Matt Valentine-House 2022-07-13 12:18:03 UTC

ここから lldb 用のコマンド実装の追加の変更が続きます。まずは misc/ の下に lldb 用の python スクリプトを追加して元からあった misc/lldb_cruby.py から切り出したり新たなコマンドを拡張するためのフレームワークみたいなのを整備しているみたいです。 [ruby-core:109195] [Feature #18910]

[281bcc8e64] Matt Valentine-House 2022-07-13 12:18:45 UTC

misc/lldb_cruby.py から heap_page コマンドを独立したファイルに分離しています。 [ruby-core:109195] [Feature #18910]

[a4ef2f1672] Matt Valentine-House 2022-07-13 12:19:41 UTC

misc/lldb_cruby.py から rclass_ext コマンドを別ファイルに分離しています。 [ruby-core:109195] [Feature #18910]

[b26aec9daa] Matt Valentine-House 2022-07-13 17:14:44 UTC

misc/lldb_cruby.py から分離するファイルを misc/ 直下から misc/lldb_rb/ というサブディレクトリ内に移動しています。 [ruby-core:109195] [Feature #18910]

[92603bbd69] Matt Valentine-House 2022-08-18 10:44:25 UTC

lldb 用の python スクリプト内で lldb_init 関数の呼び出しを RbBaseCommand というクラスのクラスメソッドに移動しています。 [ruby-core:109195] [Feature #18910]

[59da26789f] git 2022-08-18 17:25:54 UTC

misc/lldb_rb/commands/command_template.py の行末の空白除去。

[f34280ec6b] Nobuyoshi Nakada 2022-08-17 08:41:48 UTC

sprintf.c で文字列の coderange のクリアをしてたのをその場で再スキャンして設定するようにしています。

[99116da7f0] Nobuyoshi Nakada 2022-08-17 07:10:51 UTC

sprintf.c の rb_str_format() でも coderange をクリアしていたのを必要な部分だけ再スキャンして設定するように最適化しています。

[35c794b26d] Nobuyoshi Nakada 2022-08-18 09:31:34 UTC

file.c の str_shrink() という関数で文字列の capacity を切り詰めるだけの処理でも Windows 環境での不具合で coderange が変化してる場合があるとのことでクリアしていたのが 725626d8905fe1ac4a2cf1c3e2db6412bf8f381f で修正されて不要になったとのことで削っています。

Qnil との直接比較していたところを NIL_P() マクロを利用するリファクタリング

parse.y の trailer という [] や {} の中の要素のデリミタのあとに置かれるノードで空と改行コードどちらかというのが列挙されてたところを opt_nl という同じ意味のノードに置き換えるリファクタリング

[a50df1ab0e] schneems 2022-07-26 20:16:21 UTC

tool/sync_default_gems.rb に syntax_suggest という default gem の同期用に upstream リポジトリ設定を追加しています。また gem_prelude.rb に起動時の syntax_suggest の読み込みを追加しています。 [ruby-core:105191] [Feature #18159]

[490af8dbdb] schneems 2022-07-26 20:21:09 UTC

a50df1ab0eb312e5cdcf010d2c1b362ec41f3c59 に続いて default gems の syntax_suggest を upstream からマージしています。標準添付ライブラリの追加ですね。中身はみてませんがチケットによると end の閉じ忘れによる SyntaxError をわかりやすくする、というのが主な動機みたいですが、名前からしてもうちょっと一般的に修正方法の候補を提示するエラーメッセージを出すようなものでしょうか。 [ruby-core:105191] [Feature #18159]

[61ab06fe8a] git 2022-08-19 01:03:07 UTC

NEWS の default gems のバージョンリストのところに syntax_suggest を追加しています。これはバージョン変更時に自動的に追記するフックによるものですね。 syntax_suggest の追加そのものについての NEWS の追記はまだです。

[bd0fe26b81] Nobuyoshi Nakada 2022-08-19 01:20:13 UTC

doc/time/in.rdoc および doc/time/zone_and_in.rdoc のタイムゾーンのアルファベット1文字略記についての記述を修正しています。

[17d0e5bee7] Hiroshi SHIBATA 2022-08-19 04:20:17 UTC

tool/sync_default_gems.rb の syntax_suggest の upstream repo を ruby 組織のものに変更しています。

[6bcb473d9c] Yusuke Endoh 2022-08-19 09:33:33 UTC

標準添付ライブラリ error_highlight で TypeError と ArgumentError に ErrorHighlight::CoreExt を extend して to_s を上書きするのをコメントアウトしていたのをやめて有効にしています。

ruby-trunk-changes 2022-08-18

今日は Thread::SizedQueue#push にキーワード引数 timeout を追加する変更や、文字列の操作で coderange をリセットするタイミングを減らす最適化などがありました。

[b4daf6e28e] Peter Zhu 2022-08-17 13:38:11 UTC

0264424d58e0eb3ff6fc42b7b4164b6e3b8ea8ca で追加した GC の性能に関するテストに GC.start(full_mark: false) を追加して誤検出を防ぐようにしています。

[b4539dba7a] Jemma Issroff 2022-08-17 17:24:50 UTC

benchmark にインスタンス変数への代入のベンチマークを追加しています。 YJIT のベンチマークからの移植みたいです。

[bfefaf47f0] git 2022-08-17 17:26:43 UTC

version.h の日付更新

[fbaa2f0b3b] Nobuyoshi Nakada 2022-08-18 02:05:34 UTC

defs/gmake.mk の bundled gems を .bundled/gems/ ディレクトリ下に展開する処理で git リポジトリで対象のブランチ/タグや commit hash を取り出す時に git checkout に --detach オプションを追加しています。

[2a55c61ee7] Yusuke Endoh 2022-08-18 02:35:17 UTC

拡張ライブラリ pty の extconf.rb の util.h ヘッダをチェックするのを OpenBSD でのみ実行するようにしています。

[725626d890] Nobuyoshi Nakada 2022-08-18 02:37:54 UTC

C API の rb_econv_append() で文字コードの変換をしつつ文字列の追加をする処理で追加した部分のバイト列の coderange をスキャンしてセットするようにしています。 [ruby-core:109522] [Bug #18964]

[b3718edee2] git 2022-08-18 07:04:23 UTC

gems/bundled_gems と NEW の minitest のバージョンを 5.16.3 に更新しています。

[fe61cad749] Jean Boussier 2022-07-26 15:40:00 UTC

Thread::Queue#pop と同様に Thread::SizedQueue#push にもキーワード引数 timeout を追加して要素の追加時の空き待ちの時間に上限を設定できるようにしています。キーワード引数の追加に伴なって引数の処理部分は ruby 実装に移動しています。 [ruby-core:109348] [Feature #18944]

[b0b9f7201a] Jean Boussier 2022-07-25 08:21:38 UTC

str_shrink()、rb_str_format()、ruby_vsprintf0() などで文字列バッファ変更後に coderange の指定をクリアして必要に応じて再スキャンさせるようにしています。また rb_str_modify_expand() では逆に coderange をクリアしていたのをやめています。変更時に一律クリアしていたのをやめて非効率な再スキャンを抑制するためのようです。

ruby-trunk-changes 2022-08-17

今日は make install 時の default gems の gemspec の spec.date を固定する変更などがありました。

[b7577b4d9e] Nobuyoshi Nakada 2022-08-16 15:45:27 UTC

rubyspec の Time のテストからタイムゾーンに Europe/Amsterdam を利用したテストをコメントアウトしています。最新版の tzdata でこのタイムゾーンが消えた? みたいです。

[5528648a91] git 2022-08-16 15:45:50 UTC

version.h の日付更新

[cc443f6cde] Nobuyoshi Nakada 2022-08-16 15:48:11 UTC

tool/rbinstall.rb の内部的なクラスを分割するリファクタリング

[ac890ec062] Nobuyoshi Nakada 2022-08-16 15:52:37 UTC

tool/rbinstall.rb で default gems の gemspec ファイルを読み込んだ時に spec.date を RUBY_RELEASE_DATE で上書きするようにしています。未指定だと make install した時にその実施した日が入る? ので実行するたびに変化しうるのでそれを避けるためみたいです。

[81fbc8d553] Nobuyoshi Nakada 2022-08-13 14:50:00 UTC

mjit_exec() の定義を mit.h から vm.c に移動しています。mjit_worker を Ractor を利用するようにした変更のおかげでヘッダに分離しておく必要がなくなったのかな?

[b880576e59] Nobuyoshi Nakada 2022-08-13 15:13:24 UTC

mjit.h で #include "yjit.h" していたのが過剰とのことで削除して mjit_compile.c で直接 #include するように変更しています。 yjit.h の何を MJIT の実装で利用してるんだろう。

[72adee6e36] Nobuyoshi Nakada 2022-08-14 06:33:30 UTC

b880576e595adab0e5ed0a25369ec7035c2cbfc1 の変更に追随するため common.mk の依存関係の再生成をしています。

[ddb81b9307] Nobuyoshi Nakada 2022-08-17 08:39:40 UTC

sprintf.c の rb_enc_vsprintf() と rb_str_vcatf() から共通部分を ruby_vsprintf0() という関数に切り出して共有するリファクタリング

ruby-trunk-changes 2022-08-16

今日は標準添付ライブラリ cgiCGI.escapeURIComponent, CGI.unescapeURIComponent というメソッドの追加や UnboundMethod#bind_call の最適化などがありました。

[8d40ede2e0] Burdette Lamar 2022-08-15 13:16:13 UTC

拡張ライブラリ date の rdoc 用コメントの手直し。

[0264424d58] Peter Zhu 2022-08-15 13:14:35 UTC

cdbb9b8555b4ddcc4c557f25ad785cae6209478d で sweep 処理時にパフォーマンスの劣化を防ぐために page の復活を追加した変更に対応したテストケースを追加しています。 [ruby-core:109256] [Bug #18929]

[ee864beb7c] Nobuyoshi Nakada 2022-08-15 17:05:12 UTC

YJIT が有効かどうかの判定のマクロの YJIT_BUILD のかわりに USE_YJIT を参照するように修正しています。 https://github.com/ruby/ruby/pull/6240

[e34720dcf4] git 2022-08-15 17:05:28 UTC

version.h の日付更新

[4e66b3f47b] Peter Zhu 2022-08-15 13:35:49 UTC

doc/rdoc/markup_reference.rb のドキュメントの重複した記述の削除。

[e49db0f760] Penelope Phippen 2022-08-15 19:45:51 UTC

UnboundMethod#bind_call メソッドでメソッド呼び出しをする時に内部的に UnboundMethod から Method オブジェクトに相当するものを生成する時に、一時的にしか利用されないので method entry の複製を抑制して不要なオブジェクト slot の消費を抑えるようにしています。

[0608a9a086] John Hawthorn 2022-08-15 23:14:12 UTC

T_FIXNUM 型の整数オブジェクトの Marshal.dump で 31 bit を越える幅が必要なものは一旦 T_BIGNUM のオブジェクトに変換してから出力していたのを専用の処理で書き出すようにして不要なオブジェクト生成を抑制するようにしています。 https://github.com/ruby/ruby/pull/6229

[5389c9813b] Nobuyoshi Nakada 2022-08-16 04:49:11 UTC

79fdf9712dea4943a15c4ef34348b1a159b62f4a で追加した拡張ライブラリ psych のテストの一部を除外するためのファイル test/excludes/Psych/TestDateTime.rb のメッセージに YAML にはユリウス歴など古いカレンダーの扱いについての規定がないというのを yaml の spec へのリンクと共に追記しています。

[3850113e20] Jean Boussier 2022-06-09 10:07:58 UTC

拡張ライブラリ cgi/escape に CGI::Escape.escapeURIComponent と CGI::Escape.unescapeURIComponent を追加しています。そしてこれを利用して CGI.escapeURIComponent と CGI.unescapeURIComponent を追加しています。また CGI.escape と CGI.unescape の実装で中間オブジェクトを抑制するため破壊的メソッドを利用するようにリファクタリングしています。 [ruby-core:108822] [Feature #18822]

ruby-trunk-changes 2022-08-15

今日は標準添付ライブラリ rinda のテストの修正と bundler の不具合修正がありました。

[89aa09afaf] Jeremy Evans 2021-08-06 22:36:33 UTC

標準添付ライブラリ rinda のテストで IPv4 の multicast ソケットを作れるかどうかチェックするメソッドを追加して作れない[環境ではテストを skip させるようにしています。一部のテストメソッドでは既に個別に書いてた実装をヘルパーとして切り出して他にも必要だった場所に追加している感じですね。 [ruby-core:82640] [Bug #13864]

[cbcf2dad39] git 2022-08-15 05:12:08 UTC

version.h の日付更新

[e77c8397c2] David Rodríguez 2022-08-11 18:32:38 UTC

bundler で bundle update した時に Gemfile.lock の platform が誤って消えることがあった不具合を修正しているみたいです。