ruby-trunk-changes 2019-10-17

今日は標準添付ライブラリ drb の修正や reline の複数行対応強化や File.extname の "." で終わるファイル名に対する仕様変更などがありました。

[f8fb51c976] Nobuyoshi Nakada 2019-10-16 12:00:36 UTC

43015275b9a7f2833c93ad11ea96ae4cb3b7acd7 の assert_raise_message の alias 追加を revert しています。 test-unit の assert_raise_message は tool/lib/test/unit/core_assertions.rb の assert_raise_with_message と仕様が違ってて例外クラスの検査をしないので同一視はできなかったようです。

[7df227804a] aycabta 2019-10-16 13:34:58 UTC

標準添付ライブラリ reline の ヒストリ検索で複数行対応。

[5c80dffd05] Takashi Kokubun 2019-10-16 15:28:53 UTC

e8124729fbeaf159ae615f61980ee10018ed5134 の .travis.yml で arm64-linux 環境において ccache を無効化したのを revert しています。一度は効果があるかと思ったけどやっぱりエラーになったとのこと。Travis-CI の環境はインスタンスガチャ的な要素があるのかなかなか安定しないですね。

[e003f29e21] git 2019-10-16 15:29:39 UTC

version.h の日付更新

[3fea2d91ad] Benoit Daloze 2019-10-16 16:21:18 UTC

NEWS ファイルのサンプルコード部分のインデントを変更。偶数個スペースのインデントにしたいらしいです。

[e26c6d4ab8] aycabta 2019-10-16 16:51:29 UTC

標準添付ライブラリ reline の Reline::LineEditor#reset と #rerender からプロンプト処理の部分をメソッドとして切り出しています。

[db84123600] aycabta 2019-10-16 17:19:01 UTC

e26c6d4ab840c100c4f3ad20d0399598ef427c13 で切り出したメソッド check_multiline_prompt でプロンプトの幅も返すようにして呼び元で上書きするようにしています。

[2993b24a1e] Jeremy Evans 2019-08-25 00:11:06 UTC

public/private/protected/module_function などのメソッドは引数を渡さずに呼ぶと class 文や module 文のそれ以降のメソッド定義に効くようにモードを変更するような働きをしますが、これをメソッド内で呼んだ時にはおそらく誤用なので警告を出すようにしています。 [ruby-core:79751] [Bug #13249]

[50b8033d6b] Jeremy Evans 2019-08-14 23:44:11 UTC

標準添付ライブラリ drb でサーバー側でのオブジェクトのメソッド呼び出しで発生した例外をレスポンスとして返すようにしてたのを NoMemoryError, SystemExit, SystemStackError, SecurityError はそのまま再 raise するようにしています。 [ruby-core:40942] [Bug #5618]

[567e312d1f] Jeremy Evans 2019-08-08 22:44:26 UTC

標準添付ライブラリ drb で Socket#setsockopt を実行した時の IOError, Errno::ECONNRESET, Errno::EINVAL などの例外を無視するようにしています。 socket が close 済みの時にこれらの例外が発生する可能性があるみたいです。 [ruby-core:53186] [Bug #8039]

[d5744aff3a] Jeremy Evans 2019-10-14 16:00:42 UTC

標準添付ライブラリ drb の DRbServer#any_to_s で d0ed935d5bf8c3fce9800742a36e44fb7f63dda4 で BasicObject 対応で UnboundMethod を使って kernel#to_s を呼ぶようにしたところでオブジェクトのクラスが Object を継承してるかというチェックをしてましたが、ここが既に to_s の呼び出しに失敗したケースだったのでこの分岐を消して常に bind_call を使うようにしています。

[37457117c9] Kazuhiro NISHIYAMA 2019-10-17 03:51:29 UTC

標準添付ライブラリ shellwords の escape で文字列置換の結果にグループのキャプチャを参照する \1 を使ってたのを、かっこを消してマッチした全体の \& を使うようにしています。

[60a0c20cb6] aycabta 2019-10-17 07:35:11 UTC

e26c6d4ab840c100c4f3ad20d0399598ef427c13 で切り出した reline の prompt 処理メソッド check_multiline_prompt の引数から special_prompt を削除してメソッド内に呼び元のロジックを移動しています…が、なんかメソッド内に移動したところには special_prompt への代入部分がなくて、常に nil になって NameError になってしまいそうな気がします。

[41457dcbe0] aycabta 2019-10-17 07:54:06 UTC

と思ったら 60a0c20cb637ac3b2edc561dbc5888fae290b0e6 の special_prompt の nil 初期化が不要だったようで削除しています。 あーなるほどそもそもこの変数参照してるところがなくなってるんだ。

[2a22a6b2d8] Kenichi Kamiya 2019-10-17 08:44:46 UTC

String や Symbol の match/match? メソッドで引数に nil が渡された時に nil や false を返していたのを、Regexp#match や #match? と同じ挙動になるように TypeError を発生させるように変更しています。 https://github.com/ruby/ruby/pull/1506

[2a261909cc] git 2019-10-17 08:45:02 UTC

2a22a6b2d8465934e75520a7fdcf522d50890caf の行末の空白除去。

[e169ad93f4] Nobuyoshi Nakada 2019-10-17 05:42:38 UTC

File.extname は通常拡張子の "." (ドット)も含んだ部分を返しますが、ファイルの末尾が "." で終わる場合はこれを削って(拡張子ではない、ということなんでしょうね)空文字列を返していましたが、この例外処理のためファイル名が basename + extname で復元できないエッジケースができてしまうということで仕様変更して "." を返すようにしています。なるほどなー。確かにこっちのほうが一貫してる気はする。 [ruby-core:89615] [Bug #15267]

[4f13927f1f] Nobuyoshi Nakada 2019-10-17 10:42:25 UTC

e169ad93f44e1944ecf7bb65133fd34e8b868ea8 の File.extname の変更は実は Windows 環境以外でのみの変更なので rdoc 用コメントや NEWS の記述に追記しています。あれ、そうなのか。 File.extname の実装は Windows 版は別のところにあるのか。 [ruby-core:89615] [Bug #15267]