ruby-trunk-changes 2019-09-26

今日は var in pattern というような後置 in 記法? による短い pattern match 記法の導入や C 実装のメソッドでも keyword splat の変換の警告が出るようにする変更、ruby2_keywords メソッドの追加、Symtol#to_s と Module#name が freeze された String を返すようになるなど追加や仕様変更がありました。

[5b1fd79ad9] Nobuyoshi Nakada 2019-09-25 11:51:20 UTC

拡張ライブラリ io/wait の IO#ready? の rdoc 用コメントから戻り値が nil になるケースを削除しています。 r50262 の変更への追随とのこと。

[ae83dbe28d] Nobuyoshi Nakada 2019-09-24 00:03:38 UTC

標準添付ライブラリ reline の Reline::ANSI.getc で IO#select を使ってたのをやめて IO#getbyte を呼ぶようにしています。 getbyte だとブロックしない?
[追記]よくみると元のコードが IO#select が nil を返した時に next を呼んで busy loop してたので読めるようになるまで抜けないという意味だと同じ(どっちかというとより悪い)でした。これ break の間違いだったんじゃないかなぁ。[/追記]

[4755e23d2e] git 2019-09-25 15:27:40 UTC

version.h の日付更新

[80b5a0ff2a] Jeremy Evans 2019-09-25 18:18:49 UTC

C 実装のメソッドで引数の処理をするマクロ rb_scan_args() ではキーワード引数をいわゆるオプション引数(通常引数の最後に (主に) Symbol をキーとした Hash を渡す引数)と明確に区別していなかったのを、呼び元が keyword splat だったのか通常引数として渡したのかの情報を伝播させるようにして、ruby 実装のメソッドと同様に keyword splat と通常引数の相互の変換時の警告を出力できるようにしています。うわー、これはすごいな。これに対応して標準添付ライブラリやテストでも C 実装のメソッド呼び出しに明示的に ** をつけて keyword splat にする変更が行なわれてます。これは結構影響するコード多いかな。 https://github.com/ruby/ruby/pull/2460

[3b302ea8c9] Jeremy Evans 2019-09-21 16:03:36 UTC

Module#ruby2_keywords という private メソッドを追加して、public/protect/private のようなメソッド群と同様にメソッド名の Symbol を受け取ってそのメソッドは rest 引数で受け取った引数を別のメソッド呼び出しに splat 引数(*args のように配列を展開して渡す記法)で委譲した場合に、元のメソッドを keyword splat で受け取ってたらその属性を残して最後に呼ばれたメソッドでも keyword 引数として扱う? という仕様にするようにしています。これはつまり古い挙動のメソッドをこれをつけることで 2.7 でも保持できるようにするってことかな。実装でちょっとおもしろいのは、この仕様だと情報をメソッド呼び出しをまたがって伝播しないといけないので struct RHash のフラグに新しいビットを追加して Hash オブジェクト自体に元が keyword splat かどうかという情報を持たせるようにしています。なんかちょっと意図しない伝播がないか気になるけど。

[9b10698705] Nobuyoshi Nakada 2019-09-26 00:53:16 UTC

拡張ライブラリ io_console に IO#console_mode および IO#console_mode= というメソッドを追加。 IO::ConsoleMode というクラスも追加されていてこれをセットすることで raw mode, echo の on/off などの指定/取得が簡単にできるようにしているようです。こういうメソッドまだなかったんだっけ。

[5357ceb1ca] Nobuyoshi Nakada 2019-09-26 00:54:24 UTC

拡張ライブラリ io/console のカーソル位置の操作/取得などでクエリ用の文字列を String オブジェクト化するのを使う直前に行なうように遅延しています。しかしこれ使われないケースってエラーの場合であんまり多くないんじゃないかな…。

[1fe73dc860] Yusuke Endoh 2019-09-26 02:35:01 UTC

80b5a0ff2a7709367178f29d4ebe1c54122b1c27 の rb_scan_args_set() の変更で GCC の警告が出てしまってたそうで if 文の条件部をちょっと冗長に書きかえてます。うーん、この警告何を意味してるんだ…。 false-positive warning って書いてあるから実際には問題なかったみたいだけど。なんかこの警告の抑制のための変更は前もしていたような気がするな。

[3cee99808d] Nobuyoshi Nakada 2019-05-21 01:29:34 UTC

後置 in の記法による短いパターンマッチが単文で行なえる文法を導入しています。これは強力そう。けどまだ experimental なので使うと警告が出るようになっています。 [ruby-core:92733] [Feature #15865]

[93faa011d3] Alan Wu 2019-09-22 19:36:00 UTC

rb_fstring() に共有文字列の root になっている String オブジェクトのバッファを解放してしまう可能性があるという不具合があったのを修正しています。 struct RString の flags に新たに bit を割り当てて root になってるオブジェクトをマークしておくようにしています。 [ruby-core:94831] [Bug #16151]

[47a234954a] Alan Wu 2019-09-22 20:09:32 UTC

struct RString の flags のブットフラグの定数 STR_IS_SHARED_M をもうちょっと散文的(?)に STR_BORROWED という名前に改名しています。

[5d8f112505] Takashi Kokubun 2019-09-26 03:53:41 UTC

MJIT のバックグラウンドでコンパイルしている worker を一時停止する RubyVM::MJIT.pause メソッドのキーワード引数 wait: true の指定時に複数のコンパイルが動いていたらそれら全ての処理が完了するまで待つように修正しています。

[4a4c502825] Takashi Kokubun 2019-09-26 03:57:43 UTC

MJIT 関係の benchmark を追加? 分割? しています。なにやら専用の BenchmarkDriver::Runner のクラスを定義していていますね。

[6ffc045a81] Benoit Daloze 2019-09-08 09:53:27 UTC

Symbol#to_s が freeze された String を返すように変更しています。オブジェクト生成を抑えるためでしょうけど若干の仕様変更ではありますね。 [ruby-core:94815] [Feature #16150]

[8436b2717c] Daniel Berger 2019-07-11 13:20:43 UTC

rubygems の Gem::Package に attr_reader :gem を追加しています。

[508afe2c26] Ellen Marie Dash 2019-08-17 04:45:09 UTC

rubygems の gem パッケージ作成時のビルド時刻に環境変数 SOURCE_DATE_EPOCH が指定されてたらそれを使うことで再現テストができるようにするのをメソッドに切り出しています。また環境変数に設定されてなかった時は現在時刻を使いますが、同時に環境変数にもそれを逆にセットするようにして以降の一貫性を保つようにしているようです。 https://github.com/rubygems/rubygems/issues/2290

[8f2379b0c5] bronzdoc 2019-05-30 02:22:52 UTC

rubygems の Gem::Specification#ruby_code に OpenSSL::PKey::RSAインスタンスを渡すと渡されたオブジェクトの class (てことはたいてい OpenSSL::PKey::RSA)を返すようにしています。ううーん? なんだろうこれは。

[2e9c078707] bronzdoc 2019-05-30 02:23:59 UTC

同じく rubygems の Gem::Specification#ruby_code のインデントの修正のみ。

[d1c97ceb86] bronzdoc 2019-06-22 01:30:37 UTC

8f2379b0c5e182eb6e417431cbdcf2a0edfba71a で追加したテストの比較用の gemspec ファイル内容の変更。んんん??

[5c872b297c] bronzdoc 2019-06-22 01:37:09 UTC

と思ったら 8f2379b0c5e182eb6e417431cbdcf2a0edfba71a の Gem::Specification#ruby_code の変更は revert されて Gem::Specification#to_ruby で signing_key の OpenSSL::PKey::RSA オブジェクトをスキップするようにする修正が入っています。これならテストと対応が取れてますね(正しいのかどうかはよくわかりませんが)。

[f5248f6f50] Hiroshi SHIBATA 2019-08-09 07:20:50 UTC

.github/workflows/workflow.yml を追加して GitHub Actions で macOS での rubygems のテスト実行? を行うようにしています。が、これファイルパスの指定とかからみて rubygemsリポジトリからそのまま入っちゃったので ruby リポジトリ用ではないような気がします。

[01c90f17d9] Hiroshi SHIBATA 2019-09-15 02:37:30 UTC

f5248f6f504701960a2bbb7a51117060f7d66613 で入れた workflow ファイルの修正。

[ba8fb735cb] Hiroshi SHIBATA 2019-09-15 05:13:00 UTC

.github/workflows/ubuntu-rvm.yml を追加。これもたぶん rubygems から流入してきたものだと思います。

[769a28d7dc] Hiroshi SHIBATA 2019-09-15 05:32:30 UTC

ba8fb735cb3151ce48e388878da0565119222e95 で追加した .github/workflows/ubuntu-rvm.yml の修正。

[ad638a713a] Hiroshi SHIBATA 2019-09-17 09:06:50 UTC

さらに /.github/workflows/ubuntu-rvm.yml の修正。

[ea5b136155] David Rodríguez 2019-09-10 09:07:03 UTC

rubygems の依存関係チェックで bundler のバージョンチェックの修正らしいですがよくわからず。

[1fb44d2b8c] f 2019-09-20 13:38:10 UTC

lib/rubygems/platform.rb で archtecture 判定で linux の時に linux-xxx のような suffix 部分も抽出するようにしています。 libc のバージョンをつけるらしい。 https://github.com/rubygems/rubygems/pull/2918

[73633683c5] f 2019-09-20 15:54:48 UTC

1fb44d2b8c324afdb969c37df48b0ff5856fa65f の追加修正とテスト追加。あー linux-msul とかそういうやつか。バージョンっていうか種類ですね。gnu の時は無視するようにしています。

[6134fd7a64] David Rodríguez 2019-09-24 15:27:27 UTC

lib/rubygems/requirement.rb の不要なコメントを削除。

[4f87a1583d] David Rodríguez 2019-09-24 15:35:00 UTC

rubygems でいくつかバージョンに pre-release のバージョンをつけるときに ".a" を付加するように書いてたところを Gem::Requirement.default_prerelease というメソッドを参照するようにリファクタリング? しています。

[0b65a7a19e] bronzdoc 2019-09-26 01:31:57 UTC

rubygems のテストのエラーを修正。

[1eb503373e] Hiroshi SHIBATA 2019-09-25 12:34:55 UTC

rubygems の Gem::Installer#verify_spec で gem の依存関係が runtime なのか development なのかのチェックをよる厳密に行なって不正な type だったら例外にするようにしています。

[966915d807] Hiroshi SHIBATA 2019-09-26 05:06:37 UTC

0b65a7a19e949eece72a6a961a2642c0e5e19eb0 のインデントの修正のみ。

[54839f0173] David Rodríguez 2019-09-12 08:19:11 UTC

rubygems による Kernel#warn メソッドの再定義で keyword splat の対応を追加したところで JRuby 向けに分岐して従来のメソッド呼び出しをするようにしています。

[a2af473018] David Rodríguez 2019-09-12 07:44:22 UTC

54839f01736a8827be64c7f1720d226d37fa17d3 に関連して Kernel#warn の再定義のテストを追加。

[d4a86e407e] Hiroshi SHIBATA 2019-09-26 09:07:17 UTC

a2af47301834ede4892dbbe1b7da28317202657e で追加されたテストで警告メッセージのチェックの修正。

[2a490d5660] Hiroshi SHIBATA 2019-09-26 09:24:20 UTC

a2af47301834ede4892dbbe1b7da28317202657e で追加されたテストの再修正。 警告除去のため assert_match の呼び出しに明示的にかっこをつけるようにしています。

[c8f7168653] Hiroshi SHIBATA 2019-09-26 10:22:30 UTC

f5248f6f504701960a2bbb7a51117060f7d66613 や ba8fb735cb3151ce48e388878da0565119222e95 で rubygems から入ってきてしまった GitHub Actions 用の設定ファイルを削除しています。

[9d0866c7d7] Jean Boussier 2019-09-26 08:41:43 UTC

6ffc045a817fbdf04a6945d3c260b55b0fa1fd1e の Symbol#to_s の返す String を freeze されたものにする変更に伴ない Module#name が返す String も freeze されたものをそのまま返すようにしています。 [ruby-core:94815] [Feature #16150]

[1070456bb8] git 2019-09-26 11:25:42 UTC

9d0866c7d7b9cbe36a851744a37806e747e0e7a8 の行末の空白を除去。