ruby-trunk-changes 2019-11-12

今日は obj.:meth 記法の revert や rubygems の require の修正(まだ途中?)などがありました。

[f1f27da6c4] Hiroshi SHIBATA 2019-11-11 12:49:21 UTC

8b27c23b5d55bd707a89bb5d95d2bdba9e132c1a の rubygems の変更の部分的 revert を revert。CI のエラーが収まらなかった模様。

[bcfe94b7f2] Hiroshi SHIBATA 2019-11-11 13:17:50 UTC

fdfad905227a0e2e4c224d87181041fb75d5082e で標準添付ライブラリ uri の default gem 化を revert したのを revert して、再度 default gem 化しています。 f1f27da6c457684fdbfc0352297e6847f675ce4c の rubygems の変更(というか revert の revert)により require 時の問題は解決したそうです。

[45bb6f28db] aycabta 2019-11-11 13:55:32 UTC

irb の独自 tokenizer の lib/irb/ruby-token.rb はもう利用していないので削除しています。

[0ba1ea7fbf] "NARUSE, Yui" 2019-11-11 16:00:22 UTC

tool/merger.rb で git を利用している場合 upstream をローカルリポジトリの remote の origin という名前のものを使うのではなく git.ruby-lang.org のほうを URL 指定で参照するように修正しています。

[b2b1279272] "NARUSE, Yui" 2019-11-11 16:22:09 UTC

tool/format-release でパッケージの情報を GitHub Actions による YAML 情報を取り込むようにしています。またリリースノートの雛形を表示するようにしています。

[14b5c4cb66] git 2019-11-11 16:23:23 UTC

version.h の日付更新

[b72eda3c59] Yusuke Endoh 2019-11-11 16:25:42 UTC

rubygems で Bundler.setup を呼ぶ時にメッセージの出力を抑制するようにしています。

[c02de30efb] Yusuke Endoh 2019-11-11 16:30:42 UTC

tool/lib/leakchecker.rb を強化して環境変数 LEAK_CHECKER_TRACE_OBJECT_ALLOCATION をセットしたら fd の leak 検出時にどこで開いた fd かも表示するようにしています。正確にはオブジェクトの allocate した位置ですが。

[99be207c2a] Koichi Sasada 2019-11-11 08:17:26 UTC

NEWS ファイルに ruby による組み込みメソッド実装の機構についてちょっと追記しています。 [Feature #16254]

[a815053a3e] Koichi Sasada 2019-11-11 19:03:33 UTC

f1f27da6c457684fdbfc0352297e6847f675ce4c で revert された rubygems の変更の部分でデバッグのため require を抜ける時点で Monitor を所有しっぱなしだったら例外発生させるようにしています。

[4be1e84d78] Koichi Sasada 2019-11-11 19:13:54 UTC

a815053a3ea16382bea8b420a3070b4da3c3bb94 にさらに例外で抜けようとしていた場合にバックトレースも表示させるようにしています。

[b8d242d221] Koichi Sasada 2019-11-11 19:33:28 UTC

a815053a3ea16382bea8b420a3070b4da3c3bb94 および 4be1e84d7894751799cc9d8ae2dec720952a02a3 のデバッグ用コードで原因が判明したようで rubygems の require の再定義で File.symlink? が例外を発生させた時に Monitor#exit が漏れてたのを修正しています。

[d9978ce5d3] Hiroshi SHIBATA 2019-11-11 23:03:26 UTC

さらに rubygems の require 再定義でパス名を untaint するのに Gem::UNTAINT という定数を使ってたのを直接 untaint メソッドを呼ぶように修正しています。2.7 から $SAFE が deprecated になるのに対応するために 2.7 以降では untaint を省略するために空の Proc オブジェクトを格納しておくようにしていたみたいですけど、現状だとまだ untaint が必要だった(File.symlink? が SecurityError を発生させてしまった)みたいですね。

[9594f57f3d] Yusuke Endoh 2019-11-11 23:31:13 UTC

Kernel#require のテストで $SAFE の機能を確認するテストは削除しています。 [ruby-core:95398] [Feature #16131]

[2407e89725] Yusuke Endoh 2019-11-11 23:39:38 UTC

d9978ce5d397866afae536db2aa708af3b7a4b2f の rubygems の require で untaint を直接呼ぶようにしたのはやっぱり revert しています。 b8d242d221641752a495ca43f8f211a3ad73d467 で問題のテストを削除したのでってことなので、 revert してたのは SecurityError が発生してたからじゃなくて、これらのテストが通らなくなってたからってことだったのかも。

[4a30fabfcf] Koichi Sasada 2019-11-12 00:35:26 UTC

a815053a3ea16382bea8b420a3070b4da3c3bb94 で追加した rubygems の require でのデバッグ出力で require に入る前から Monitor を取得済みだった場合は抜ける時に所有したままでも問題ないので出力を抑制するようにしています。こっちの問題はまだ対応完了じゃなかったのか。

[ed90ec3e0d] Nobuyoshi Nakada 2019-11-12 00:11:16 UTC

メソッド引数などのデフォルト値で def m(a=a) みたいな循環した参照は警告を出すようにした影響か、デフォルト値にブロックつきメソッド呼び出しを書きそのブロックのパラメーターに {|| ... } のように明示的に空のパラメーターを書いた場合に SyntaxError が起きるという不具合があったのを修正しています。 [ruby-core:95799] [Bug #16343]

[fef4370b40] Koichi Sasada 2019-11-12 00:48:49 UTC

4a30fabfcfd72bd61bf1dad61f168eaba6100f12 のさらに続きで rubygems の require でメソッドに入る時と抜ける時とで Monitor の所有状態が変化してたらデバッグ出力するように変更しています。

[fd6445b7e8] Koichi Sasada 2019-11-12 01:02:47 UTC

どうやら rubygems の require の問題は標準添付ライブラリ monitor 側にあったようで Monitor#exit で呼んでいる Thread が Monitor を所有済みの Thread でなかったら例外を発生させるようにしています。

[5ef41c91f0] Jean Boussier 2019-07-24 20:08:59 UTC

拡張ライブラリ psych の gemspec ファイルの依存する ruby のバージョンを 2.4.0 以降に更新しています。

[30fdee65d9] Jeremy Evans 2019-10-18 19:34:59 UTC

拡張ライブラリ psych で 2.7 からの $SAFE の deprecate に対応するため OBJ_TAINT() の呼び出しを削っています。

[db33ab470c] Aaron Patterson 2019-10-17 20:48:24 UTC

拡張ライブラリ psych の Psych.load の rdoc 用コメントに、信頼できないデータをこのメソッドに読ませてはいけないということと、そういう時は safe_load を使うように追記しています。

[b38b26c62d] Jeremy Evans 2019-10-18 18:44:47 UTC

拡張ライブラリ bigdecimal でも $SAFE の deprecate に対応するため rb_check_safe_obj() の呼び出しを削っています。

[593f0b8853] Kazuhiro NISHIYAMA 2019-11-12 02:27:55 UTC

.github/workflows/windows.yml で GitHub Actions の cache 機能を利用してパッケージマネージャで使うパッケージを cache するようにしているようです。

[dbaf589fb8] Hiroshi SHIBATA 2019-11-12 03:49:05 UTC

bundled gems の rake のバージョンを 13.0.1 に更新しています。

[7c22898a3a] Nobuyoshi Nakada 2019-11-12 06:42:53 UTC

parse.y でブロックパラメーターのルール部で空のブロックパラメーター "||" を tOROP トークンとして受け取ってたのを lexer のほうを修正して 2つの "|" にばらして返させるようにしています。

[2de3feab44] Nobuyoshi Nakada 2019-11-11 15:08:39 UTC

31416423809f64d4b5ea6b9651cced3179cc5ced で追加した組み込みメソッド定義時の ruby で使える __builtin_inline! の実装で生成する C のコードで定義する関数名も __builtin_inline{0,1,2,3,..} みたいな名前にしていましたが、C でアンダースコア2つで始まる名前は予約されているので避けて rb_compiled_inline という prefix を使うように修正しています。

[dd0217a869] Nobuyoshi Nakada 2019-11-11 15:07:26 UTC

同じく __builtin_inline! の実装のため builtin.h に追加された rb_vm_lvar() は static 関数として宣言するようにしています。

[b0fb9bda9a] Nobuyoshi Nakada 2019-11-11 15:09:34 UTC

同じく __builtin_inline! で引数の文字列リテラルの末尾の空白文字を削るようにしています。

[14db635097] 卜部昌平 2019-11-12 07:15:58 UTC

NEWS ファイルの numbered parameter のセクションにローカル変数として _1, _2 などを宣言することはできることを追記しています。

[fb02e3192c] Nobuyoshi Nakada 2019-11-12 07:35:01 UTC

拡張ライブラリの出力先に作られる common/ というサブディレクトリの依存関係のため .RUBYCOMMONDIR.time という timestamp ファイルを使って作成するようにしています。 https://github.com/ruby/ruby/pull/2669

[d1ae2bc27f] Yusuke Endoh 2019-11-12 08:04:11 UTC

NEWS ファイルの引数の完全委譲のための m(...) 記法について、明示的なかっこが常に必要であることを追記しています。 [ruby-core:95338] [Feature #16253]

[a58b4eee25] Nobuyoshi Nakada 2019-11-12 08:14:10 UTC

一見 endless range のようにみえてしまう(実際には次の行に連結されてしまう)行末の ... には警告を出力するようにしています。

[b41a19f92f] Kazuhiro NISHIYAMA 2019-11-12 08:22:19 UTC

593f0b88533c9d327b33d098bb6b3b51df871966 の続きで GitHub Actions の Windows 版でパッケージを cache するキーに matrix.os の値も含めるようにしています。 https://github.com/ruby/ruby/pull/2671

[fb6a489af2] Nobuyoshi Nakada 2019-10-23 16:06:59 UTC

obj.:meth という記法で Method オブジェクトを取り出す機能を revert しています。 [ruby-core:95502] [Feature #16275]

[0f2837847d] Kazuhiro NISHIYAMA 2019-11-12 08:46:39 UTC

NEWS ファイルの typo 修正やチケットの参照追加。

[3bf8ffad71] Nobuyoshi Nakada 2019-11-12 09:02:28 UTC

File.realpath や File.realdirpath のテストにちゃんと絶対パスになっていることを確認する assertion を追加しています。いくつかのシステムでは realpath(3) や realdirpath(3) が相対パスを返すことがあるとのこと。

[f36a53d038] Hiroshi SHIBATA 2019-11-12 06:44:19 UTC

Monitor#mon_owned? が使えるのは 2.5 以降とのことで rubygems の require の実装で呼ぶのは respond_to? で確認してからにしています。