ruby-trunk-changes 2020-01-25

今日はブロックパラメーターへの配列の自動 splat が keyword splat を渡すことでも抑制されてしまっていたのを修正する変更や Array#join に内部から ruby レベルのメソッド呼び出しする可能性のあるポイントの後で配列を未チェックで参照していた潜在的な不具合の修正などがありました。

[c1d8829ef5] Jeremy Evans 2020-01-24 20:13:41 UTC

Proc の呼び出し時に配列を渡したら自動的に複数のブロックパラメーターに splat する挙動(これがまたややこしいんですよね…)は yield に複数の引数が実際に渡されてたら抑制されて1つめのブロックパラメーターに配列が渡されるようになりますが、keyword splat でキーワード引数を渡した時に抑制されてしまっていたのでこの時は抑制しないようにしています。 [ruby-core:96990] [Bug #16560]

つまり m{|a, b| p [a, b] } みたいな2つのブロックパラメーターを受け取るように宣言されたブロックに対して m の中から yield([42, 72]) だと [42, 72] になる(yield している引数は1つにもかかわらず、配列を splat して複数のパラメーターとして分解して渡す)けど yield([42, 72], nil) だと [[42, 72], nil] と1つめの引数を splat するのが抑制される。ところが yield([42, 72], **{}) でも [42, 72], nil となってしまっていたけど、この場合は [42, 72] のほうがいいよね、ということですね。

[92a30acbfb] git 2020-01-24 21:04:34 UTC

version.h の日付更新

[2b2821acd3] Nobuyoshi Nakada 2020-01-19 15:29:40 UTC

Array#join で引数を文字列に変換するために to_str を呼び出した時に ruby レベルのメソッドに処理が移る場合があるので、その後で配列の内容が変化されて文字列じゃなくなっていた場合に SEGV したりする可能性があったので修正しています。

[0c436bbfbf] Nobuyoshi Nakada 2020-01-19 15:41:56 UTC

2b2821acd39530c6c786e34f304e9e018a31e5c4 と同様に Array#join で変換のために to_str を呼び出した後で配列のサイズも変化している可能性があるので再度チェックするようにしています。

[b4711a0fa0] Yusuke Endoh 2020-01-25 05:14:05 UTC

標準添付ライブラリ rinda のテストのタイムアウトを伸ばしています。 Solaris 上での CI で足りないことがあったとのこと。

[4396ced07d] Yusuke Endoh 2020-01-25 10:48:10 UTC

rubyspec の Process.times のテストでデバッグ用の出力を追加しています。

ruby-trunk-changes 2020-01-24

今日は ruby2_keywords で宣言されたメソッドで通常引数から keyword splat に変換された空の Hash を消さないようにする対応の削除や将来削除される予定の API の警告を出力するための C API の追加などがありました。

[aefb13eb63] Nobuyoshi Nakada 2020-01-23 12:42:05 UTC

rb_warn_deprecated_to_remove() という C API を追加して、e18b817b1f0a4c318f1f0fe54fceaa5cbc85e8ab で変更した taint/untaint メソッドでの警告出力にこれを使うようにしています。将来のバージョンで削除される機能の警告用に -W によるカテゴリ毎の抑制がきくようにしつつ警告出力するようにしています。昨日カテゴリが効いてないなーって思ったんですよね。

[27ac1c615d] Nobuyoshi Nakada 2020-01-23 12:49:58 UTC

aefb13eb631cc5cd784fe2fc10f1f333a2c5e68c のうち path_taint() と path_untaint() で rb_warn_deprecated_to_remove() を使うようにしてたのは revert しています。これは拡張ライブラリ内で、rb_warn_deprecated_to_remove() は非公開な C API なので。そうなのかー。ま、そうか。

[109183c2c0] Nobuyoshi Nakada 2020-01-23 13:03:13 UTC

aefb13eb631cc5cd784fe2fc10f1f333a2c5e68c の(というよりは e18b817b1f0a4c318f1f0fe54fceaa5cbc85e8ab の)変更に追随して rubyspec の taint/untaint のテストを 2.8 以降では実施しないように ruby_version_is での guard を追加しています。

[2bde7919a0] zverok 2020-01-19 11:49:15 UTC

Module#const_source_location メソッドの rdoc 用コメントの英文などの修正。

[6551a25a19] git 2020-01-23 17:22:58 UTC

version.h の日付更新

[f8a8f05512] Jeremy Evans 2020-01-23 02:12:34 UTC

ちゃんと理解できてるか不安ですが ruby2_keywords つきで宣言されたメソッドで通常引数の最後の Hash を keyword splat の引数に変換した時に空っぽになった Hash を通常引数から消さずに残すようにしていたのをやめて常に消すようにしています。

[6b86549df8] Nobuyoshi Nakada 2020-01-24 00:46:34 UTC

2bde7919a0a8302c344e9bb9ddc217958fcbd3c7 の Module#const_source_location の rdoc 用コメントのサンプルに行番号を示したコメントを追加するようにしています。またサンプルの結果の行数が誤ってたのを修正しています。

[db82c680cd] Yusuke Endoh 2020-01-24 01:29:33 UTC

doc/make-cheetsheet.md というドキュメントを追加しています。 configure と make のチートシートみたいです。主に開発者向けかな。

[3b9f36d6c6] 卜部昌平 2020-01-23 02:59:37 UTC

拡張ライブラリ fiddle のテストで C ライブラリ に msul を使ってる環境(alpine など)での libc のライブラリパスの対応を追加しています。

[50925b6409] 卜部昌平 2020-01-23 03:14:19 UTC

Encoding のテストで拡張ライブラリ Etc を使って GLIBC のバージョンを取得してるところでも musl 環境を考慮して定数が取得できない場合を考慮するようにしています。

[a19228f878] 卜部昌平 2020-01-23 06:33:42 UTC

同じく musl を使っている環境で File.lchmod がサポートされてない場合に Errno::EOPNOTSUPP を発生させる場合があるのに対応するために fileutils やテストで例外の捕捉に追加しています。

[80bbc7f402] "NARUSE, Yui" 2020-01-24 06:16:13 UTC

昨日の be6931f7f7d2eed46226f0cc452de64cdeec0dab の Net::HTTP の verify_hostname オプション追加について NEWS に追記しています。 https://github.com/ruby/ruby/pull/2858 [ruby-core:96975] [Feature #16555]

[5bb1c81a33] MSP-Greg 2020-01-24 04:23:23 UTC

db82c680cdc1cf282e5792ca682ed719ae5879db で追加した doc/make-cheetsheet.md を doc/make_cheatsheet.md に改名しています。ううむ、気がつかなかった。

[9af7d048b6] Kazuhiro NISHIYAMA 2020-01-24 06:59:45 UTC

doc/make_cheatsheet.md 内の typo も修正。

ruby-trunk-changes 2020-01-23

今日は $SAFE の特別変数としての実装の削除や taint/untaint メソッドの警告が $VERBOSE=true でなくても出るようにする変更、pp の ruby2_keywords フラグとの関連の不具合修正のほか Net::HTTP に verify_hostname を off にできる機能の追加などがありました。

[e91c39f1c0] Jeremy Evans 2020-01-17 19:36:52 UTC

$SAFE を特別変数として処理する機構を削除しています。既に 2.7 で $SAFE をセットしても効果はなくなっていたので、関連する各種 C API も削除しています。 rb_set_safe_level() 消すのは互換性的にはどうかな、と思ったけど次は 3.0 でしたねそういえば。 [Feature #16131]

[90f5c3c1ea] git 2020-01-22 17:10:07 UTC

version.h の日付更新

[28d31ead34] Jeremy Evans 2020-01-22 00:14:10 UTC

標準添付ライブラリ pp の PP#seplist でブロックを yield する時に明示的に空の Hash で **{} と keyword splat 引数を渡すようにして、splat 引数で渡してる通常引数の最後の Hash にたまたま ruby2_keywords フラグがついていたためにうっかりキーワード引数に変換されるのを防ぐようにしています。 [ruby-core:96957] [Bug #16519]

[e18b817b1f] Jeremy Evans 2020-01-22 17:18:08 UTC

taint や untaint メソッドの deprecated 警告を rb_warning() から rb_warn() に変更して $VERBOSE がセットされてなくても出力するようにしています。

[425b2064d3] Nobuyoshi Nakada 2019-07-14 04:06:22 UTC

拡張ライブラリ readline の依存関係 depend を再生成しています。

[a737f0cea5] aycabta 2019-12-03 03:36:01 UTC

標準添付ライブラリ readline のテストで windows? メソッドで Windows 環境かどうか判定していたのを RUBY_PLATFORM をチェックするように変更しています。これは minitest のメソッドなのでそれに依存しないようにするためとのこと。

[f09c1cf0e9] aycabta 2019-12-03 03:46:14 UTC

readline のテストで Readline.refresh_line のテストを assert_ruby_status が未定義の時は skip するようにしています。 ruby 本体にしかない EnvUtils のメソッドなので独立したリポジトリでのテストで落ちないようにするためかな。

[0d3e4b8a79] aycabta 2019-12-03 03:46:55 UTC

readline のテストで skip のかわりに omit を使うようにしています。そういえば skip は test/unit じゃないんだった。

[890200e85e] aycabta 2019-12-03 03:54:24 UTC

readline のテストで DONT_RUN_RELINE_TEST という環境変数をセットすると Reline を使うテストは定義せず require もしないようにしています。これも upsteam で古い ruby でのテストのためかな。

[be6931f7f7] Yuta Iwama 2020-01-23 08:23:17 UTC

標準添付ライブラリ net/http に Net::HTTP#connect 時に OpenSSL::SSL::SSLContext#set_params に渡すパラメーターの verify_hostname を指定できるようにする機能を追加しています。チケットをみるにチェックを skip させて proxy 経由などの時のチェックを抑制するため。なんかちょっと前に似たような変更をみたような。。 [ruby-core:96975] [Feature #16555] https://github.com/ruby/ruby/pull/2858

[0ea759eac9] Benoit Daloze 2020-01-23 09:59:26 UTC

28d31ead34baff1c4abc0d7d902ef4bc1d576fb2 の PP の ruby2_keywords のフラグつき Hash の対応のテストにテストケースをもうひとつ追加しています。

ruby-trunk-changes 2020-01-22

今日は Windows 上で Samba 上のファイルを利用する時の不具合対策や Windows 版での reline の端末判定の強化などがありました。

[d1166c6d39] Lars Kanis 2020-01-18 17:46:37 UTC

標準添付ライブラリ reline の Windows 版で MinTTY を使われてる時に検出するロジックが不完全(標準出力をパイプに繋げた時に誤検出する?)なので Reline::Windows.msys_tty? というメソッドを実装して Win32API の GetFileInformationByHandleEx() を使ってその内容で判定するようにしています。

[b0ca1fc21b] Lars Kanis 2020-01-18 20:22:24 UTC

readline および reline のテストで Encoding として locale encoding を使ってたところを default_external を使うように修正しています。また Windows では基本的に UTF-8 を使うようにしています。

[25f2005a63] Xia Xionjun 2020-01-21 13:41:45 UTC

コミットログによると Windows 上で VSCode で Samba 上の ruby スクリプトを編集中にそのファイルを実行すると require_relative がエラーになってしまうので、大元の rb_cloexec_open() でファイルディスクリプタを open(2) で開く時に EAGAIN を捕捉して何回かリトライするようにしています。sleep(0) とかしててなかなか大胆、というかこれはちょっといまいちですね。たぶん Samba 上のファイルということなので保存が走ったタイミングとかで open できない瞬間があったりするんでしょうけど、うーん……。

[5798d35ff6] Nobuyoshi Nakada 2020-01-21 13:45:10 UTC

ということで 25f2005a638570cce832d218a451072057610f06 の再修正というかリファクタリングも込みで EWOULDBLOCK も捕捉するようにしています。

[913dc64eb6] Nobuyoshi Nakada 2020-01-21 23:54:49 UTC

25f2005a638570cce832d218a451072057610f06 で io.c の mode に実行権限の bit が付与されてしまってたみたいなので戻しています。

[e51b6aa81d] git 2020-01-21 23:55:17 UTC

version.h の日付更新

[cdaae38f79] aycabta 2020-01-22 04:44:41 UTC

tool/sync_default_gems.rb で default gems の upstream のリポジトリ名を取得するのに使う $repositories のキー名を gem 名のものを使うようにしています。 "-" が入るとクオートが必要になっちゃうので削ってたけど一貫性を重視してって感じですね。

[9e3bfed53c] Hiroshi SHIBATA 2020-01-22 07:02:10 UTC

tool/sync_default_gems.rb のコメントに簡単な使いかたの例を追記しています。

[c90fc55a1f] Kazuhiro NISHIYAMA 2020-01-22 07:04:38 UTC

benchmark/fiber_chain.yml、ext/fiddle/win32/fficonfig.h、ext/fiddle/win32/libffi.mk.tmpl などのファイルにも mode に実行権限の bit がついてしまっていたみたいなので落としています。

[461db352c2] 0x005c 2020-01-08 11:40:08 UTC

gc.h のマクロ RUBY_MARK_NO_PIN_UNLESS_NULL() を RUBY_MARK_MOVABLE_UNLESS_NULL() と改名しています。

ruby-trunk-changes 2020-01-21

今日は主に標準添付ライブラリ reline の vi mode でのコマンドの実装追加などがありました。

[b17797a694] aycabta 2020-01-17 04:44:07 UTC

標準添付ライブラリ reline の vi mode で 't' で次に入力した文字が出現する位置までを選択する機能が実装されてなかったので追加しています。

[3b407abe9b] aycabta 2020-01-17 11:17:23 UTC

同じく標準添付ライブラリ reline の vi mode で 'F' による逆向きの文字検索の機能を実装しています。

[f451bb5406] Lars Kanis 2020-01-17 18:30:28 UTC

irb の completion のコードで Array#append を呼んでいたのを Array#push を呼ぶように変更しています。 ActiveRecord でも Array#append というメソッドが追加されていたらしいのですが、ruby 2.5 から本体にも Array#append が追加されて複数引数を受けとるように Array#push の alias として定義されたので、古い rails との互換性のために append ではなく push を直接使うほうが良いとのことです。なるほどなー。

[51a8055d7d] Kenta Murata 2020-01-16 04:13:35 UTC

irbIRB::Context#newline_before_multiline_output というオプションを追加して、これに true を指定すると複数行編集時に評価した値の表示する時に空行を追加するようにしています。

[93ca212dda] Kenta Murata 2020-01-20 00:38:52 UTC

51a8055d7db8a6ae35a9f624700c0910ec20aeb8 で編集バッファが複数行になっているかの判定に Enumerator を使ってたのを正規表現で判定するようにリファクタリングしています。 /\A.*\Z/ で判定できるのかー。 m オプションがついてない正規表現では "." は改行にはマッチしないかつ末尾の改行は無視されるからか。

[2943ebd240] aycabta 2020-01-21 00:30:30 UTC

標準添付ライブラリ reline の vi mode での vi_change_meta という "c" に続く選択で指定した範囲を置換するキーの処理が空っぽだったのを実装しています。

[32fb6c8c11] git 2020-01-21 00:53:46 UTC

version.h の日付更新

[97d75639a9] 卜部昌平 2020-01-21 05:21:15 UTC

rb_class_clear_method_cache() で rb_serial_t * にキャストしてから dereference した値を VALUE の変数で受けてたのを rb_serial_t に型を変更しています。環境によっては VALUE のほうが幅が小さいので情報が落ちる可能性がありました。

[8113f3fee4] Koichi Sasada 2020-01-21 07:58:00 UTC

make run.gdb で run.gdb を生成する時に rb_assert_failure() と rb_bug() にも break point を初期化時にセットするようにしています。

[1de7941ff8] Kazuhiro NISHIYAMA 2020-01-21 09:04:20 UTC

標準添付ライブラリ un.rb の rdoc 用コメントに引数の DocumetRoot は省略可能になっているのに記述が追随していなかったのを修正しています。

ruby-trunk-changes 2020-01-20

今日は昨日の Dir.glob の結果が sort されるようにした時の潜在的不具合修正や内部で使ってるツール類での $/, $. への代入による警告の除去などがありました。

[2d61684e7c] Nobuyoshi Nakada 2020-01-19 12:15:23 UTC

3344f811074e1e6119eec23684013457dab4f8b0 で cygwin 版の GitHub Actions は削除したので README.md のバッジリンクも削除しています。

[884897dbe2] Nobuyoshi Nakada 2020-01-19 12:21:28 UTC

2d61684e7c334ae4c5eb845c782d5fabeffdea67 と同じく RADME.ja.md の cygwinGitHub Actions のバッジリンクも削除しています。

[bdef392ec6] Nobuyoshi Nakada 2020-01-20 00:30:17 UTC

2f1081a451f21ca017cc9fdc585883e5c6ebf618 の Dir.glob のソート化で dirp を二度 closedir() する可能性があったそうなのでエラー処理を goto でまとめてたのを修正しています。

[f31b90f2b9] git 2020-01-20 00:50:03 UTC

version.h の日付更新

[9f99760daf] Jeremy Evans 2020-01-20 07:53:31 UTC

拡張ライブラリ ripper の ext/ripper/tools/preproc.rb や Encoding 関連のヘッダ生成のためのテンプレートで、警告されるようになった特殊変数 $/ や $. への nil 以外の代入が使われてたので代替手段に書き換えています。 [ruby-dev:50393] [Feature #14240]

ruby-trunk-changes 2020-01-19

今日は Dir.glob が返すリストがデフォルトでソートされるようになる変更などがありました。

[28b290f7f4] Nobuyoshi Nakada 2020-01-19 00:48:33 UTC

GitHub Actions の macOS 版で make test-bundled-gems の実行を削っています。

[b5a2e734da] git 2020-01-19 00:48:56 UTC

version.h の日付更新

[496f295f91] Nobuyoshi Nakada 2020-01-18 11:46:55 UTC

tool/test-bundled-gems.rb で bundled gems のテスト実行時にタイムアウトを設定して、時間を超えたらシグナル送出して止めるようにしています。

[edf2cedc9c] Nobuyoshi Nakada 2020-01-19 02:02:18 UTC

28b290f7f4cb332dab3ddf3132e1916d413ea65c の GitHub Actions の macOS 環境で test-bundled-gems を削ったのを revert して、かわりに rexml のテストを TEST_BUNDLED_GEMS_ALLOW_FAILURES の仲間に入れるようにしています。

[af6563f024] Ryuta Kamizono 2020-01-19 03:49:40 UTC

7cfe93c028fbf7aa0022ca8a4ac6a66d0103337a で追加された Hash.ruby2_keywords_hash のテストのテストメソッド名の最後についてた "!" を削っています。提案時点ではこのメソッドは ! つきで引数の Hash を直接変更するものだったみたいですね。

[2f1081a451] Nobuyoshi Nakada 2020-01-17 15:21:11 UTC

Dir.glob や Dir[] で返す名前のリストをデフォルトで sort しておくようにしています。このためメモリ使用量が増えるので sort を抑制するために :sort というオプションも追加しています。ブロックつきの時も一旦全結果をメモリ上に持ってからイテレートするので用途によっては抑制したいこともあるでしょうね。デフォルトの挙動が sort なのはパフォーマンスへのインパクト考えるとどうだろうなぁ。 [ruby-core:56274] [Feature #8709]

[0ab93e098f] Nobuyoshi Nakada 2020-01-19 11:55:06 UTC

NEWS のコードブロックにフォーマットの指定が書けるようになったので rubyシンタックスハイライトをするように指定しています。