ruby-trunk-changes 2020-09-25

今日はたくさん変更がありました。拡張ライブラリ json の更新で JSON.load_file, JSON.load_file! の追加やいくつかオプションの追加、標準添付ライブラリ webrick の更新、Ractor のための制限の追加、そして拡張ライブラリからメモリ領域を構造的にアクセスするための Buffer Protocol (MemoryView)という C API 群の追加などがありました。

[46ba416a1f] Charles Oliver Nutter 2020-06-01 05:48:41 UTC

標準添付ライブラリ webrick のテストで Windows 系の環境で実行除外している locale に依存しているテストを JRuby でも除外するようにしています。

[96da24f279] John W Higgins 2020-07-15 15:20:31 UTC

標準添付ライブラリ webrickWEBrick::HTTPRequest#readpartial が引数の size よりも長い文字列を返すことがあったのを修正して、現在のバッファが要求されたサイズより大きかったら指定サイズだけ切り出して返すように修正しています。

[d969cf6059] Jeremy Evans 2020-07-15 16:04:52 UTC

標準添付ライブラリ webrick のテストでメソッド内に begin なしで ensure を書く文法を使ってたのをやめています。これが書けるようになったのは 2.5 からで webrick はまだ 2.3 以降をサポートしているので古い ruby でテストが動くようにするため。

[c06eab1329] John W Higgins 2020-07-21 05:55:47 UTC

標準添付ライブラリ webrick のテストに WEBrick::GenericServer. の :ShutdownPipe オプションの機能確認するテストメソッドを追加しています。

[4715a24dd2] John W Higgins 2020-07-26 07:25:37 UTC

標準添付ライブラリ webrick の :Port オプションが整数として解釈できるオブジェクトかチェックを追加しています。

[b8fdd38b2e] John W Higgins 2020-07-21 17:50:16 UTC

c06eab13290757fc326bb2a6e3ac25cd53e00894 で追加した webrick の :ShutdownPipe オプションのテストの修正。タイミング依存の失敗があるみたいで10回繰り返すようにしています。

[0fe6461148] Jeremy Evans 2020-07-26 14:46:13 UTC

標準添付ライブラリ webrick のテストで不正なリクエストを送信するソケットがわで想定する例外に Errno::EPROTOTYPE を追加しています。

[ed12019ce6] Jeremy Evans 2020-07-15 15:38:44 UTC

標準添付ライブラリ webrick で POST や PUT メソッドのリクエストで content-length ヘッダがないリクエストもリクエストボディが空(ソケットが EOF)なら許容するようにしています。 RFC 7230 で明示的に許可されているとのこと。

[c12c7fea70] Jeremy Evans 2020-07-15 20:51:04 UTC

標準添付ライブラリ webrick のテストで超巨大なリクエストを受けるテストメソッドが ruby 2.5 以降でないと動かないそうなので条件つきでテストメソッド定義するようにしています。

[f64bea6d66] John W Higgins 2020-05-30 21:57:55 UTC

標準添付ライブラリ webrickWEBrick::GenericServer#initialize で :ShutdownPipe オプションがうまくインスタンス変数にセットされてなかったのを修正しています。

[588ac990ff] Hiroshi SHIBATA 2020-09-24 12:41:11 UTC

標準添付ライブラリ webrick のテストで URL のパスにマルチバイト文字を含めた時のテストが Encoding.default_external が US-ASCII の時に警告が出るようなので $VERBOSE を一時的に nil に設定するようにしています。

[757e185cee] Hiroshi SHIBATA 2020-09-24 13:18:13 UTC

ed12019ce6abe87aac87ec77ac081d37b25180a2 の標準添付ライブラリ webrick でリクエストボディなしの POST/PUT で content-length ヘッダなしを許容する変更を revert いています。 CI がこけたみたいです。

[7ad3aff48d] Koichi Sasada 2020-09-24 08:41:10 UTC

構造体 rb_ractor_t にメンバー yield_atexit を追加して Thread 終了時の終了処理時には Ractor からのオブジェクト受信のために待ってる Ractor の処理を再開させるのはやめて、通常の Ractor の終了時? は待ってる Ractor を起こすようにしています。

[b30af31c37] git 2020-09-24 15:26:03 UTC

version.h の日付更新

[6fe2a9fcda] Burdette Lamar 2020-09-24 15:55:43 UTC

String のメソッドの rdoc 用コメントのサンプルに使う文字列などの変更。これ変更する必要あるかな……。 https://github.com/ruby/ruby/pull/3569

[38385d28df] Burdette Lamar 2020-09-24 18:23:26 UTC

String のメソッドの rdoc 用コメントの説明など強化。 https://github.com/ruby/ruby/pull/3574

[c5960d51d1] Hiroshi SHIBATA 2020-09-24 22:33:20 UTC

b8fdd38b2e01abcfd4cc8d007a3b3afb285f5ddb の標準添付ライブラリ webrick のテストの修正を revert しています。

[53acf6686a] Hiroshi SHIBATA 2020-09-24 22:54:01 UTC

同じく c06eab13290757fc326bb2a6e3ac25cd53e00894 の標準添付ライブラリ webrick の :ShutdownPipe オプションのテスト追加も revert しています。

[83ff0f74bf] Burdette Lamar 2020-09-24 23:38:11 UTC

String#match? の rdoc 用コメントに Regexp へのリンクを追加しています。 https://github.com/ruby/ruby/pull/3576

[996af2ce08] Nobuyoshi Nakada 2020-08-31 05:58:31 UTC

deprecated のカテゴリの警告をデフォルトで off にするようにしています。また -w オプションをつけると自動的に -W:deprecated もつけたように解釈して deprecated 警告 on にするようにしています。 https://github.com/ruby/ruby/pull/3481 [ruby-core:95808] [Feature #16345]

[fe875be01a] 卜部昌平 2020-09-23 00:41:08 UTC

configure で RUBY_ALIGNAS() マクロを定義するためコンパイラごとのいろんな手法を試してたところを消しています。 include/ruby/internal/stdalign.h でマクロで環境判定して定義をわけているので configure のチェックは不要とのこと。

[e9fb2bc873] 卜部昌平 2020-09-23 01:57:35 UTC

同じく configure で alignof() の亜種をチェックしているところで GCC の __alignof__ は i686 環境で期待してるのと違う値を返す場合があるらしいので _Alignof() を優先するようにして、さらに古い GCC や clang では _Alignof() もバグがあるらしいので、configure で使えるかどうかチェックするようにしています。

[873fb1aa4c] 卜部昌平 2020-09-23 04:30:56 UTC

ALLOCA_N() マクロの定義で可能なら __builtin_alloca_with_align() を使って alignment を意識したメモリ確保するようにしてたのをやめています。 RUBY_ALIGNOF() マクロを使うのをやめるためとのこと。

[0b77a86d1e] 卜部昌平 2020-09-23 05:29:05 UTC

RUBY_ALIGNOF() の挙動を確認するテスト用拡張ライブラリを追加しています。対応するテストスクリプトがないなと思ったけど RBIMPL_STATIC_ASSERT() で静的にチェックしているので、コンパイルが通るかどうかだけでテストとしているんですね。

[e75aed7abb] 卜部昌平 2020-09-24 01:58:01 UTC

include/ruby/internal/stdalign.h の RBIMPL_ALIGNOF() の定義に C++ 用の定義で constexpr を使ってたのを避けるようにしています。

[4cc501bcfd] 卜部昌平 2020-09-24 03:16:31 UTC

0b77a86d1ec3a8bb3d62ea38a93d7aed44dd2c0c で追加した RUBY_ALIGNOF() のテストのための拡張ライブラリで C++コンパイラがない場合にエラーにならないよう extconf.rb で $objs に ext/-test-/RUBY_ALIGNOF/cpp.cpp を含めないようにしています。

[c6c241e49c] 卜部昌平 2020-09-25 01:21:45 UTC

include/ruby/internal/stdalign.h の RBIMPL_ALIGNOF() マクロ定義のところのコメントに説明と参考 URL をさらに追加しています。

[fde136152e] Koichi Sasada 2020-09-25 00:08:54 UTC

struct RBasic::flags のビットフラグの定数として FL_SHAREABLE を追加しています。これは tainted のマークのために使われてた FL_TAINT と同じビットを使っています。互換性のために? FL_TAINT という定数も残ってはいますが、3.0 からはこれは意味が異なるので注意が必要です。そして rubyspec の C API チェックのための拡張ライブラリで FL_TAINT を使ってるところがあったので、FL_SHARABLE が定義されてたら使わないように修正しています。

[5286526346] Koichi Sasada 2020-09-24 18:19:27 UTC

rb_ractor_shareable_p_continue() で T_OBJECT 型のオブジェクトはそれ自体が freeze されていて保持しているインスタンス変数も全て Ractor 間で sharable なものだけだったら sharable と判定するようにしています。

[d247dedade] Koichi Sasada 2020-09-25 02:39:15 UTC

Ractor.yield で既に Ractor の送信 port が close されてたら Ractor::ClosedError 例外を発生させるようにしています。

[6081ba4a87] Koichi Sasada 2020-09-25 04:07:07 UTC

bootstraptest/test_ractor.rb のテストのリファクタリング

[33641e00cd] Charles Oliver Nutter 2020-07-16 15:21:18 UTC

拡張ライブラリ psych の private_iv_get という "@" ではじまらない内部的なインスタンス変数を取得するという裏技めいたメソッドが定義されてたのを消して、Exception の内部的な mesg インスタンス変数の取得はかわりに Exception#message メソッドを呼ぶようにしています。

[f794c928a0] SzymonKowalczyk 2020-07-16 12:26:48 UTC

拡張ライブラリ psych のバージョンを 3.1.1 に更新し、JRuby 版の時に SNAKEYAML というライブラリ? に依存してるみたいですが、このバージョンを指定しているらしい DEFAULT_SNAKEYAML_VERSION という定数も "1.26" に更新しています。脆弱性修正みたいですね。

[263c43487f] SzymonKowalczyk 2020-07-16 12:36:25 UTC

f794c928a007ba2edddac0de14eb0f4af9491c6c で Psych::VERSION を "3.1.1" に更新した部分は revert しています。

[b72f9200ac] Jean Boussier 2020-09-10 13:12:11 UTC

拡張ライブラリ psych の Psych.load_stream および Psych.load_file に keyword rest 引数を追加して、内部で呼ぶ node.to_ruby にそのまま委譲するようにしています。今後の拡張を考えると Psych.load にも追加しなくていいのかな。

[511fe23fa2] Masaki Matsushita 2020-08-28 04:07:31 UTC

拡張ライブラリ socket の TCPSocket.new のキーワード引数に resolv_timeout を追加して、名前解決の時点でのタイムアウトを設定できるようにしています。 [ruby-core:99766] [Feature #17134]

[f2d1808e73] Masaki Matsushita 2020-09-25 06:39:26 UTC

TCPSocket.new の rdoc 用コメントに 511fe23fa2bdf1f17faa91e0558be47b5bb62b2a で追加したキーワード引数 resolv_timeout について追記しています。

[97416ae54c] Masaki Matsushita 2020-09-25 06:47:47 UTC

511fe23fa2bdf1f17faa91e0558be47b5bb62b2a で追加した TCPSocket.new のキーワード引数 resolv_timeout について NEWS に追記しています。

[96739c4222] Koichi Sasada 2020-09-25 05:06:32 UTC

ractor_obj_ivars_shareable_p() で Struct のインスタンスであるクラスのインスタンスで freeze されてて所属しているオブジェクトも全て sharable なものも sharable として判定するようにして Ractor 間で共有可能にしています。 Struct のインスタンス(つまりクラス)自体は freeze されてなくてもいいんだな、と思ったけど後から属性は増やせないからいいのか。

[25cfb0c040] Koichi Sasada 2020-09-25 05:16:30 UTC

Range も T_STRUCT 型のオブジェクトだったので freeze すれば sharable になるのでテストケースに追加しています。

[c5ea060ef8] Soutaro Matsumoto 2020-09-25 08:08:39 UTC

NEWS に RBS の bundled gems 化について追記しています。 https://github.com/ruby/ruby/pull/3579

[e1659af372] Jean Boussier 2020-01-30 11:48:05 UTC

拡張ライブラリ json に upstream から JSON.generate の escape_slash オプション対応を追加しています。これに true を渡すと文字列内の "/" に対してその前にバックスラッシュを追加した JSON エンコードを生成するようになっているようです。なんでだろ。"/" にエスケーブが必要な処理系があるのかな。

[c3614877d2] Keith Bennett 2020-06-30 18:07:23 UTC

拡張ライブラリ jsonJSON.load_file と JSON.load_file! メソッドを追加しています。これは欲しかったやつ! なお末尾の "!" の有無は呼ばれる JSON.parse と parse! にそれぞれ対応しています。

[71b1bbad02] BurdetteLamar 2020-06-30 19:50:06 UTC

拡張ライブラリ json の rdoc 用コメントの一部をメソッドのドキュメントから JSON クラス全体のところに移動しています。

[36b2177ea8] BurdetteLamar 2020-07-03 19:11:26 UTC

拡張ライブラリ json の rdoc 用コメントに call-esq の追加など。

[8c057bb845] BurdetteLamar 2020-07-04 14:21:12 UTC

拡張ライブラリ json の rdoc 用コメントのサンプルの typo 修正やサンプルの追加など。

[f8d43e5370] Karol Bucek 2020-07-06 11:32:09 UTC

拡張ライブラリ json の gemspec ファイルの spec.required_rubygems_version と spec.require_paths の削除。コミットログによると json-java と gemspec を統合するためみたいです。

[0089854fc5] Karol Bucek 2020-07-06 18:09:50 UTC

拡張ライブラリ json のテストで JRuby 用にテストから早期 return してたのをテストメソッドの定義自体を行なわないように変更しています。

[e9096f796c] BurdetteLamar 2020-07-28 18:57:16 UTC

拡張ライブラリ jsonJSON.load の rdoc 用コメントのサンプルの強化など。

[de0e0ffad4] BurdetteLamar 2020-07-29 19:46:13 UTC

拡張ライブラリ jsonJSON.recurse_proc に rdoc 用の :nodoc: タグのコメントを追加してドキュメント化を抑制しています。

[3d5e833998] Julien Feltesse 2020-08-14 03:45:09 UTC

拡張ライブラリ json の gemspec ファイルの spec.files に LICENSE ファイルを追加しています。

[71f64e15b9] Burdette Lamar 2020-08-14 05:03:12 UTC

拡張ライブラリ jsonJSON.dump の rdoc 用コメントの call-seq 追加やサンプルの強化。

[038252fe66] BurdetteLamar 2020-08-20 16:37:42 UTC

拡張ライブラリ json の rdoc 用コメントの余計なクロスリファレンスの抑制。

[927a377a7c] Jean Boussier 2020-09-09 14:48:07 UTC

拡張ライブラリ JSON.load_file の rdoc 用コメントの call-seq でのクラス名が間違ってたのを修正。

[e30d1b0923] Marc-Andre Lafortune 2020-06-30 05:10:49 UTC

拡張ライブラリ json のテストに配列やオブジェクトの閉じかっこ ("]", "}") が抜けてる時のものを追加しています。

[81dc37b1b4] Hiroshi SHIBATA 2020-09-25 06:40:56 UTC

拡張ライブラリ json のテストで assert_true を使ってたのをただの assert に変更しています。 コアのテスト用ライブラリの test/unit には assert_true がないためとのこと。

[cd44febc93] Kazuhiro NISHIYAMA 2020-09-25 07:09:20 UTC

.github/workflows/check_dependencies.yml というファイルを追加して GitHub Actions で ruby tool/update-deps を実行して Makefile の依存関係に更新があったら Slack 通知する workflow を追加しています。

[8705dba194] Kazuhiro NISHIYAMA 2020-09-25 09:48:57 UTC

common.mk の ractor.c の依存関係を更新しています。

[6eeacbbc36] Hiroshi SHIBATA 2020-09-25 11:28:31 UTC

拡張ライブラリ json のテストの 81dc37b1b41db9957d783b28cb1a4eaa03a5bd5d で assert に変更したチェックを assert_include と assert_not_include を使うようにリファクタリングしています。

[890bc2cdde] Kenta Murata 2020-09-25 11:32:02 UTC

Python の Buffer Protocol というメモリ空間を特定の型としてアクセスするための機能と同様のものを Ruby に追加しています。拡張ライブラリから使うためのもので Ruby レベルの Class/Module が追加されるわけではなく一連の C API が追加されているようです。なおまぎらわしいですが protocol buffer の対応がコアに入ったわけではありません。 https://github.com/ruby/ruby/pull/3261 [ruby-core:86746] [Feature #14722]

[caaa36b4e6] Koichi Sasada 2020-09-25 09:31:04 UTC

Module#define_method に Proc オブジェクトを渡して定義したメソッドは定義したのとは別の Ractor からは呼べないように制限を加えています。 構造体 rb_method_bmethod_t のメンバーに defined_ractor として定義した Ractor を追加して一致しない時は RuntimeError 例外発生させるようにしています。