ruby-trunk-changes 2022-03-30

今日は主に正規表現のマッチ処理にタイマウトを設定できるようにする新機能の追加や TracePoing#enable にブロックを渡した時の target_thread のデフォルト値の変更などがありました。

[c67088dbae] Nobuyoshi Nakada 2022-03-29 09:42:00 UTC

拡張ライブラリ psych の extconf.rb にバンドルしている libyaml より外部ライブラリとしてインストール済みのものが使えるならそちらを優先するようにしています。 default gems なので他のバージョンの ruby と使っている場合の対応……かな? そういえば gem としてリリースされていた psych には libyaml のソースファイルはバンドルされてなかったのかな。

[b257034ae5] Burdette Lamar 2022-03-29 14:54:29 UTC

String のメソッドの rdoc 用コメントを doc/string/*.rdoc に分離する変更。 https://github.com/ruby/ruby/pull/5730

[87123c4fc7] Jemma Issroff 2022-03-29 08:37:46 UTC

拡張ライブラリ objspace の ObjectSpace.dump_all の結果をチェックする専用の assertion を定義して使うようにリファクタリングしています。

[f3b58e1d38] git 2022-03-29 15:21:28 UTC

version.h の日付更新

[173a6b6a80] Jeremy Evans 2022-03-09 22:57:49 UTC

Object#define_singleton_method が private な特異メソッドを定義してしまう場合があった不具合(?)を修正しています。 [ruby-core:107400] [Bug #18561]

[6d3f447aec] Jeremy Evans 2022-03-24 18:05:12 UTC

正規表現の中に同じ名前で変数に束縛した部分文字列をパターン内で参照した場合にマッチしないはずなのにマッチするような事象が起きていた不具合を修正しています。コード内容はさっぱりわからないけど実用的には同じ名前を使うのがあんまり良くないですよね。 [ruby-core:107892] [Bug #18631]

[9c1d32a7ad] Jeremy Evans 2021-12-27 20:52:04 UTC

TracePoint#enable にブロックが渡されていた場合はキーワード引数 target_thread のデフォルト値を Thread.current にして指定しなくても現在の Thread のみフック起動の対象になるように変更しています。 [ruby-core:98355] [Bug #16889]

[3c6a0033e3] Jeremy Evans 2021-12-27 22:08:59 UTC

9c1d32a7ada794ecd0356d56f7be3cdf3982d8ac の再修正。 TracePoint#enable のキーワード引数のデフォルト値を決めるところで式を書いてたのでそこで TracePoint のイベントフックが起動する可能性があったので、ruby 実装部分で Thread.current を渡すようにするのはやめて :default という Symbol を渡し、C 言語実装部分でそれをみて条件分岐するようにしています。なるほど、これに限らず組み込みメソッドの ruby 実装をすると TracePoint のイベント発火のしかたが変わることがありえますね。

[750e18594b] Jeremy Evans 2022-02-08 16:50:57 UTC

TracePoint#enable の rdoc 用コメントの typo 修正。

[d8dfabbfe6] Jeremy Evans 2022-02-08 16:51:55 UTC

rubyspec の TracePoint のテストを 9c1d32a7ada794ecd0356d56f7be3cdf3982d8ac の変更にあわせてバージョンで分岐したところの spec 名の内容を修正しています。

[3cad54a246] Jeremy Evans 2022-02-08 16:55:49 UTC

750e18594b138465506aba9a1225b9897026a06a の TracePoint#enable の rdoc 用コメントの修正で消し漏れてた単語を削除。

[5d43969e92] Jeremy Evans 2022-03-30 01:33:16 UTC

9c1d32a7ada794ecd0356d56f7be3cdf3982d8ac で TracePoint#enable のキーワード引数 target_thread のデフォルト値を変更した件について NEWS に追記しています。

[0bca029d2f] Nobuyoshi Nakada 2022-03-26 12:07:06 UTC

Object と Comparable の rdoc 用コメントのメソッド一覧のところで記号のメソッドのリンクを明示的に書かずに rdoc による自動的なクロスリファレンス生成にまかせるようにしています。

[71aa43c725] Nobuyoshi Nakada 2022-03-19 11:29:17 UTC

拡張ライブラリ psych の depend ファイルを更新して同梱版 libyaml 向けの依存関係を追加しています。

[8d27d00af5] Nobuyoshi Nakada 2022-03-30 05:38:33 UTC

tool/m4/ruby_replace_funcs.m4 と tool/m4/ruby_require_funcs.m4 の m4 マクロ定義でかっこの対応が間違ってたのを修正しています。

[42a0bed351] Nobuyoshi Nakada 2022-03-30 07:36:31 UTC

linked list などのデータ構造のために利用している ccan のヘッダファイルで定義しているマクロや関数に CCAN_ や ccan_ といった prefix を追加しています。 https://github.com/ruby/ruby/pull/4568

[a94002115b] Yusuke Endoh 2022-03-23 09:41:36 UTC

thread.c から double2hrtime() という関数の定義を hrtime.h に移動して inline 関数にしています。後で ffc3b37f969a779f93b8f8a5b3591b4ef7de1538 などで thread.c 以外からも使うため。

[23530d68cb] Yusuke Endoh 2022-03-24 05:14:07 UTC

rb_ractor_ensure_main_ractor() という関数を追加して現在 main Ractor で実行中でなかったら例外を発生させるようにしています。

[ffc3b37f96] Yusuke Endoh 2022-03-24 07:59:11 UTC

Regexp.timeout= というメソッドを新規追加して正規表現のマッチ中のバックトラックの割り込みポイントでマッチに利用した時間を計測して制限を越えると例外を発生させて処理を中断するようにしています。とても長い文字列を渡した時にパターンによってはバックトラック数が爆発して正規表現のマッチに長い時間がかかるので web サーバーなどで動作に影響があるという問題にアプリケーションレベルで対処するための機構だと思います。 また a94002115beaf989aec4c9b2a746ac8d19440e57 で移動した double2hrtime() を利用しています。 [ruby-core:103631] [Feature #17837]

[ce87bb8bd6] Yusuke Endoh 2022-03-24 08:00:51 UTC

ffc3b37f969a779f93b8f8a5b3591b4ef7de1538 に続いて Regexp.new にもキーワード引数 timeout を追加して正規表現インスタンス毎にもマッチ処理のタイムアウトを指定できるようにしています。 [ruby-core:103631] [Feature #17837]

[34b288f8d4] Yusuke Endoh 2022-03-24 08:01:30 UTC

doc/regexp.rdoc に Regexp.timeout= や Regexp.new の timeout キーワード引数によるタイムアウト指定についてのセクションを追加しています。 [ruby-core:103631] [Feature #17837]

[2ade40276b] Yusuke Endoh 2022-03-28 06:03:17 UTC

ffc3b37f969a779f93b8f8a5b3591b4ef7de1538 で導入した正規表現のマッチ処理のタイムアウト時に発生させる例外を RuntimeError から Regexp::TimeoutError という新しく導入した例外クラスを使うようにしています。 [ruby-core:103631] [Feature #17837]

[5df2589b64] Yusuke Endoh 2022-03-30 05:46:18 UTC

23530d68cb04aed9c2f59a050523b0193ee2d0c1 で追加した rb_ractor_ensure_main_ractor() という関数の宣言を ractor_core.h から internal/ractor.h という新たに追加したヘッダファイルに移動しています。

[ad808506b3] Yusuke Endoh 2022-03-30 06:14:48 UTC

ヘッダファイルの追加に伴なって common.mk の依存関係を再生成しています。