ruby-trunk-changes 2022-09-26

今日は主に macOS 13 での fork したプロセスが異常終了する不具合の対策や IO::Buffer の新規メソッド追加、先日の代入記号つきメソッドに ||= などを組み合わせた時の最適化の不具合の修正などがありました。

[dc7d929e54] Nobuyoshi Nakada 2022-09-25 13:40:05 UTC

38a7a13ac6ed6bba2584def7d7121257eb85e051RUBY_RELEASE_DATE を tool/make-snapshot でコミットの CommitDate から生成するようにした変更の続き(?)で configure 時に version.h がなければ revision.h RUBY_RELEASE_XXX のマクロ定数から変数を抽出するようにしています。

[1481e6828c] Nobuyoshi Nakada 2022-09-26 00:21:05 UTC

b0e3ee454d48748b4aadf1aaedd52670370d503bruby 実装の MJIT のメソッド群を前処理した mjit_c.rbinc を #include しているところで局所的に警告抑制していたのをやめて、かわりに SIGNED_TYPE_P() というマクロの定義で -1 をキャストした結果が 0より小さいかどうかで判定していたのがそもそも unsigned の型だと警告対象になってたみたいなので 1 より小さくなるかで判定するようにしています。-1 をキャストして 0 になることはないはずなので <1 で充分ということですね。 https://github.com/ruby/ruby/pull/6435

[d89f8a0467] Yuichiro Kaneko 2022-09-26 00:38:24 UTC

標準添付ライブラリ rdoc のテストで def 文でメソッドを定義しているところで end を同じ行に書く時にセミコロンが抜けてたのを修正しています。

[e3cc1a6cae] Yuta Saito 2022-09-23 18:36:04 UTC

macOS(Darwin)環境で Init_File() の最初に CFStringCreateWithBytesNoCopy() と CFStringCreateMutableCopy() という Core Foundation の関数を呼び出しておくようにしています。 rb_CFString_class_initialize_before_fork() という関数を追加していてこのコメントに詳細が書かれていますが rb_str_append_normalized_ospath() という関数でこれらの関数を利用しているのですが、macOS 13 から Objective-C の関数を利用する場合があるようになっていて、fork(2) 後に exec() せずにこれらの関数を最初に使うと異常終了させられてしまうとのことで、ruby のプロセス起動時に先に Objective-C のクラス初期化を動かしておく必要があるので Init_File() で利用する予定の関数を一度呼んでおくようにしているようです。 [ruby-core:109201] [Bug #18912]

[b361bdc200] John Hawthorn 2022-09-26 02:54:49 UTC

fbaac837cfba23a9d34dc7ee144d7940248222a2 の代入記号つきメソッドの命令列へのコンパイル時の最適化で safe-guard 演算子と組み合わせると VM スタックの consistency check がエラーになる場合があったようで pop 命令前後の LABEL の生成の制御を修正しています。 [ruby-core:110054] [Bug #19021]

[ecffc6a203] Nobuyoshi Nakada 2022-09-26 01:20:24 UTC

dc7d929e542a3372113f7864b26384ceab596197 の変更で Makefile を生成する前に revision.h が必要になったので configure 時に tool/file2lastrev.rb で revision.h 生成するようにしています。

[025b8701c0] Samuel Williams 2022-09-26 05:06:12 UTC

IO::Buffer に #get_values, #each, #values, #each_byte, #set_values などの新規メソッドとクラスメソッド IO::Buffer.size_of を追加しています。 https://github.com/ruby/ruby/pull/6434

[a8ad22d926] Shugo Maeda 2022-09-26 05:44:54 UTC

parse.y で警告抑制のために? #include "parse.h" の前に RBIMPL_WARNING_PUSH()/RBIMPL_WARNING_IGNORED()/RBIMPL_WARNING_POP() で局所的に -Wpsabi の警告フラグを無効化している(コメントにも書いてあるけど RBIMPL_WARNING_POP() で抑制は解除した後で #include しているけど、なぜかこれで効くらしい……)のが clang ではまた別の警告になるそうで __clang__ マクロが定義されていたらこのマクロ群の利用をやめるようにしています。

[411d0eec11] Samuel Williams 2022-09-26 06:37:28 UTC

IO::Buffer の read/write を read(2) や write(2) を直接呼ばず rb_thread_io_blocking_region() を利用して GVL を開放して呼び出すようにしています。あれ、今まで GVL 開放してなかったのか? https://github.com/ruby/ruby/pull/6438

[1c14e406d3] Samuel Williams 2022-09-26 06:40:23 UTC

include/ruby/io/buffer.h の二重 #include を防ぐための guard 用のマクロ名が RUBY_IO_BUFFER_T となってたのを慣習にならって RUBY_IO_BUFFER_H に修正しています。

[5b0396473b] Kazuki Yamaguchi 2022-09-26 07:39:53 UTC

9a8f6e392fbd9c145566ae18fa2128ef96369430 で String#b の実装で coderange の再設定をするようにしたところで元の文字列の Encoding が ASCII-compatible でないものだった場合は coderange の変更をしないようにしています。これはなぜだろう……。

[2e88bca24f] Jean Boussier 2022-09-26 10:48:24 UTC

String オブジェクトの部分文字列を作る str_substr() や str_byte_substr() といった関数でバッファの共有可能だった時に rb_str_new_frozen() で新たに freeze した文字列オブジェクトを作ってそれを str_new_shared() に渡していましたが、str_new_shared() の内部で必要に応じて freeze 文字列を作るようになっているのでこれをやめて不要な中間オブジェクトの生成を抑制するようにしています。