ruby-trunk-changes 2019-09-05

今日は昨日追加された rb_funcallv_with_cc() を内部向け API に変更したのと rubygems の更新などがありました。

[9f59d30daa] Nobuyoshi Nakada 2019-09-04 14:54:41 UTC

tool/lib/vcs.rb のデバッグ用出力先の IO を VCS::DEBUG_OUT という定数に入れて直接 STDERR を参照しないようにしています。

[7a1f650c13] git 2019-09-04 23:33:02 UTC

version.h の日付更新

[b005d7c2e2] 卜部昌平 2019-09-04 06:10:10 UTC

2a6457b5b7d67378528235cee7b9cb93fed00204 で追加した呼び元でメソッド探索の結果をキャッシュする rb_funcallv_with_cc() でキャッシュの検証を独自に書いてたのを vm_search_method() を呼ぶことでこちらにまかせるようにしています。

[dd2b9d4a96] 卜部昌平 2019-09-04 06:55:02 UTC

同じく 2a6457b5b7d67378528235cee7b9cb93fed00204 で追加した rb_funcallv_with_cc() の宣言を include/ruby/ruby.h から消して internal.h に移動して、インタプリタ内部の実装でのみ使えるようにして公開 C API にはしないようにしています。見逃してたけど 2a6457b5b7d67378528235cee7b9cb93fed00204 では rb_funcallv() をマクロ定義して常に rb_funcallv_with_cc() を使うように最適化されてました。で内部でしか使わないので内部の構造体 struct rb_call_cache をopaque にする必要はないので直接ポインタを受け取るようにして関数内で ZALLOC() でキャッシュの領域を確保するのは避けています。

[41bc766763] 卜部昌平 2019-09-05 05:29:11 UTC

整数と Float の比較をする rb_integer_float_eq() で y が long で表現できる範囲よりも大きいか判定する時に LONG_MAX を使わず LONG_MAX_as_double という変数に代入した double の値との比較にするようにしています。自動的な promotion にまかせると -Wimplicit-int-float-conversion というオプション設定でコンパイラの警告が出るのでこれを抑制するためだそうです。

[8a608f1b1f] Nobuyoshi Nakada 2019-09-05 05:37:05 UTC

tool/make-snapshot の -git オプションを廃止して、git を使う場合は常に事前に clone してある working copy からはじめるようにしています。うーん、なるほど?

[436099ee04] 卜部昌平 2019-09-05 06:02:07 UTC

命令を網羅するための bootstraptest に opt_nil_p を対象としたテストに条件を多少変えたものを追加しています。

[f4df9fb46b] Kazuhiro NISHIYAMA 2019-09-05 08:47:51 UTC

GitHub Actions の make test-bundled-gems のタスクの名前に test-bundled-gems という内容がわかるように文字列を追加しています。

[7a2bd91ed2] Kazuhiro NISHIYAMA 2019-09-05 08:51:02 UTC

.github/workflows/macos.yml で make test-bundled-gems にオプションを渡すのに make のコマンドラインで TESTOPTS 変数を渡してましたが -j オプションは未対応だったので削って、$JOBS の展開が不要になったのでやっぱり環境変数 RUBY_TESTOPTS 経由で渡すようにしています。

[d219be4a1c] David Rodríguez 2019-08-21 18:05:24 UTC

rubygems の Gem::Uninstaller#uninstall で対象のパッケージがない時の例外発生をより前のほうに移動しています。

[d84b9b6d0a] Alexander Pakulov 2019-08-21 22:19:10 UTC

rubygems に含まれてる S3 の署名つき URL の処理で credential 作るところと実際にリクエストを投げるところをメソッド分離して、さらにリクエストによくわかりませんが IAM の role 名を付加してリクエスト投げるようにしています。

[f9f6a3d793] David Rodríguez 2019-08-22 15:32:47 UTC

rubygems でメソッド内でクラスメソッドの操作をするために class << Gem ... end を使ってたところを Gem#singleton_gem_class というメソッドを追加してここからモジュールの特異クラスを返させて Module#class_eval を利用するようにしています。 rubocop の警告避けだそうです。

[fea91d69a3] David Rodríguez 2019-08-21 18:17:11 UTC

rubygems の uninstall サブコマンドで default gem の扱いを修正しているようです。

[95326150fa] bronzdoc 2019-08-17 14:54:17 UTC

lib/rubygems/commands/build_command.rb のちょっとしたリファクタリング、のようにみえます。

[68937fe0e4] bronzdoc 2019-08-18 19:53:41 UTC

rubygems の Gem::Commands::BuildCommand#build_gem の引数のデフォルト値を作るメソッドを get_one_gem_name から get_one_optional_argument に変えてるけどあまり深追いしてないのでよくわからず。

[bcf51dd763] bronzdoc 2019-08-18 20:04:08 UTC

で同じく rubygems の Gem::Commands::BuildCommand#build_gem の引数名を変更するリファクタリング

[a02da1012b] bronzdoc 2019-08-18 20:57:41 UTC

同じく rubygems の Gem::Commands::BuildCommand#build_gem を呼び出す execute メソッドで引数を省略せず呼び出すようにして、その引数を生成するメソッドを追加してそっちでデフォルト値を決める処理を記述するようにしています。

[6cacbf542c] bronzdoc 2019-08-18 21:19:52 UTC

rubygems の gem build のテストケースを追加しています。直近の変更に対応するテストだと思います。

[400d693863] bronzdoc 2019-08-18 21:25:29 UTC

同じく rubygems の gem build のテストで不要なファイルの準備などを削除しています。

[b11cfed4c4] bronzdoc 2019-08-22 05:35:39 UTC

rubygems の Gem::Commands::BuildCommand#build_gem に渡す引数を決めるメソッド find_gemspec 内で複数の gemspec ファイル名の候補があった時にエラーにするようにしています。

[92be07b1e1] bronzdoc 2019-08-23 21:19:54 UTC

というわけで rubygems の Gem::Commands::BuildCommand#build_gem の引数は省略可能じゃなくてよくなったので必須の(通常の)引数にして、呼び元の #execute メソッドでその引数を決める処理は専用のメソッドから execute メソッド内に展開しています。

[73574756f9] bronzdoc 2019-08-23 21:21:57 UTC

rubygems の Gem::Commands::BuildCommand#build_gem のメソッド呼び出しにかっこをつけるリファクタリング

[565828a778] bronzdoc 2019-08-23 22:41:44 UTC

test/rubygems/test_gem_commands_build_command.rb の余計な空白の削除。

[0b9b0774c3] Alexander Pakulov 2019-09-02 18:36:08 UTC

rubygems の S3 の署名つき URL 処理で String#split の結果をインデックス決めうちで取得するかわりに last で末尾の要素を取るように修正。

[d9e6315177] David Rodríguez 2019-08-22 15:36:29 UTC

rubycop のバージョンを上げただ出てきた警告除去のため代入文のイコールの両側に余計な空白を入れないようにしています。

[2a166cfea2] David Rodríguez 2019-09-05 11:00:50 UTC

ファイルパスが絶対パスかどうか判定する File.absolute_path? というメソッドを追加しています。純粋に文字列としてパスのチェックだけですが、Windows 環境の場合はドライブレターとかあるから1文字目みるだけじゃだめだし独自に実装するのもねっていうことみたいです。 https://github.com/ruby/ruby/pull/2198 [ruby-core:92794] [Feature #15868]